MANUFACTURER_PIDS = [
  #Creative Lighting DEVICE_MODE
  {'id': 0x00a1,
   'name': 'Creative Lighting',
   'pids': [
      #DEVICE_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'mode', 'type': 'uint8', 'labels': [
                            (0, 'DMX512'), (1, 'DALI'), (2, 'DSI')]
                          }
                        ]},
       'get_sub_device_range': 2,
       'name': 'DEVICE_MODE',
       'set_request': {'items': [{'name': 'mode', 'type': 'uint8',
                                  'labels': [(0, 'DMX512'), (1, 'DALI'), (2, 'DSI')]
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.creativelighting.com.au/datasheets/RDM%20Supplement.pdf',
       'notes': 'Controls the operating mode of the device',
       'value': 32768}]
  },

  #ARRI
  {'id': 0x20b9,
   'name': 'ARRI',
   'pids': [
      #FAN_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'fan_mode', 'type': 'uint8',
                            'labels': [(0, 'FAN_OFF'),
                                       (1, 'FAN_LOW'),
                                       (2, 'FAN_HIGH'),
                                       (3, 'FAN_AUTO_LOW'),
                                       (4, 'FAN_AUTO_HIGH'),
                                       (5, 'FAN_VARI'),
                                       (6, 'FAN_PASS'),
                                       (7, 'FAN_HI45')]
                          }
                        ]},
       'get_sub_device_range': 2,
       'name': 'FAN_MODE',
       'set_request': {'items': [{'name': 'fan_mode', 'type': 'uint8',
                                  'labels': [(0, 'FAN_OFF'),
                                             (1, 'FAN_LOW'),
                                             (2, 'FAN_HIGH'),
                                             (3, 'FAN_AUTO_LOW'),
                                             (4, 'FAN_AUTO_HIGH'),
                                             (5, 'FAN_VARI'),
                                             (6, 'FAN_PASS'),
                                             (7, 'FAN_HI45')]
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Change the operating mode of the fan',
       'value': 0x8001},

       #STATUS_LEDS
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'disable_status_leds', 'type': 'bool'},
                        ]},
       'get_sub_device_range': 2,
       'name': 'STATUS_LEDS',
       'set_request': {'items': [{'name': 'disable_status_leds', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Controls the status LEDs & LCD backlight',
       'value': 0x8002},

      #CCT_ADJUST
      {'get_request': {'items': []},
       'get_response': {'items': [
                         {'name': 'CCT_value', 'type': 'int32', 'multiplier': -2},
                       ]},
       'get_sub_device_range': 2,
       'name': 'CCT_ADJUST',
       'set_request': {'items': [{'name': 'CCT_value', 'type': 'int32',
                                  'multiplier': -2,
                                  'range': [(280000, 1000000)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Adjust the Correlated Color Temperature Value',
       'value': 0x8003},

      #GN_ADJUST
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'GN_value', 'type': 'int32', 'multiplier': -2},
                        ]},
       'get_sub_device_range': 2,
       'name': 'GN_ADJUST',
       'set_request': {'items': [{'name': 'GN_value', 'type': 'int32',
                                  'multiplier': -2, 'range': [(-100, 100)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Adjust the Green Shift Value',
       'value': 0x8004},

      #DMX_SIGNAL_LOSS_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'mode', 'type': 'uint8',
                            'labels': [(0, 'HOLD'),
                                       (1, 'HOLD_FOR_2_MINUTES'),
                                       (2, 'BLACK_OUT')],
                          }
                        ]},
       'get_sub_device_range': 2,
       'name': 'DMX_SIGNAL_LOSS_MODE',
       'set_request': {'items': [{'name': 'mode', 'type': 'uint8',
                                  'labels': [(0, 'HOLD'),
                                             (1, 'HOLD_FOR_2_MINUTES'),
                                             (2, 'BLACK_OUT')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Control the operations when the DMX signal is lost',
       'value': 0x8005},
      ]
  },

  #City Theatrical
  {'id': 0x4354,
   'name': 'City Theatrical Inc.',
   'pids': [
      #SHOW_ID
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'show_id', 'type': 'uint8',
                           'range': [(1, 64)],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'SHOW_ID',
       'set_request': {'items': [{'name': 'show_id', 'type': 'uint8',
                                  'range': [(1, 64)],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the SHoW ID in a SHoW DMX system.',
       'value': 0x8000},

      #OUTPUT_POWER
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'output_power', 'type': 'uint8',
                           'labels': [(0, '5mW'), (1, '10mW'), (2, '50mW'),
                                     (3, '100mW'), (4, '125mW (NA Only)')],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'OUTPUT_POWER',
       'set_request': {'items': [{'name': 'output_power', 'type': 'uint8',
                                  'labels': [(0, '5mW'), (1, '10mW'), (2, '50mW'),
                                            (3, '100mW'), (4, '125mW (NA Only)')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the output power of the transmitter and receiver. '
                'Transmit power in a receiver is used for RDM talk back data.',
       'value': 0x8001},

      #HOP_PATTERN
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'hop_pattern', 'type': 'uint8',
                           'range': [(1, 16)],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'HOP_PATTERN',
       'set_request': {'items': [{'name': 'hop_pattern', 'type': 'uint8',
                                  'range': [(1, 16)],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the SHoW DMX hop pattern in a SHoW DMX transmitter.',
       'value': 0x8002},

      #BANDWIDTH
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'bandwidth', 'type': 'uint8',
                           'labels': [(1, 'Full'), (2, 'WiFi 1-6'),
                                     (3, 'WiFi 4-9'), (4, 'WiFi 7-11')],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'BANDWIDTH',
       'set_request': {'items': [{'name': 'bandwidth', 'type': 'uint8',
                                  'labels': [(1, 'Full'), (2, 'WiFi 1-6'),
                                            (3, 'WiFi 4-9'), (4, 'WiFi 7-11')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the bandwidth usage of the SHoW DMX system.',
       'value': 0x8003},

      #NUMBER_OF_CHANNELS
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'number_of_channels', 'type': 'uint8',
                           'labels': [(1, '30'),
                                     (2, '62'),
                                     (3, '94'),
                                     (4, '126'),
                                     (5, '158'),
                                     (6, '190'),
                                     (7, '222'),
                                     (8, '254'),
                                     (9, '286'),
                                     (10, '318'),
                                     (11, '350'),
                                     (12, '382'),
                                     (13, '414'),
                                     (14, '446'),
                                     (15, '478'),
                                     (16, '512')],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'NUM_OF_CHANNELS',
       'set_request': {'items': [{'name': 'number_of_channels', 'type': 'uint8',
                                  'labels': [(1, '30'),
                                            (2, '62'),
                                            (3, '94'),
                                            (4, '126'),
                                            (5, '158'),
                                            (6, '190'),
                                            (7, '222'),
                                            (8, '254'),
                                            (9, '286'),
                                            (10, '318'),
                                            (11, '350'),
                                            (12, '382'),
                                            (13, '414'),
                                            (14, '446'),
                                            (15, '478'),
                                            (16, '512')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the number of channels transmitted in a SHoW DMX system. '
                'This functionality has largely been moved to DMX personalities.',
       'value': 0x8004},

      #LEVEL_TEST
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'test_level', 'type': 'uint8',
                           'range': [(0, 100)],
                          }
                        ]},
       'get_sub_device_range': 3,
       'name': 'LEVEL_TEST',
       'set_request': {'items': [{'name': 'test_level', 'type': 'uint8',
                                  'range': [(0, 100)],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 3,
       'link': '',
       'notes': 'Get/Set the test level setting in a SHoW DMX dimmer. '
                'Command is supported by using sub device IDs. ID 1 is dimmer A, '
                'ID 2 is dimmer B, and ID 3 is dimmer C.',
       'value': 0x8005},

      #CURVE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'curve', 'type': 'uint8',
                           'labels': [(1, 'ISL'), (2, 'Linear'),
                                     (3, 'Non-Dim'), (4, 'LED')],
                          }
                        ]},
       'get_sub_device_range': 3,
       'name': 'CURVE',
       'set_request': {'items': [{'name': 'curve', 'type': 'uint8',
                                  'labels': [(1, 'ISL'), (2, 'Linear'),
                                            (3, 'Non-Dim'), (4, 'LED')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 3,
       'link': '',
       'notes': 'Get/Set the curve setting in a SHoW DMX dimmer.',
       'value': 0x8006},

      #BUMP_ENABLED
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'bump_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'BUMP_ENABLED',
       'set_request': {'items': [{'name': 'bump_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the bump enable button.',
       'value': 0x8007},

      #DATA_LOSS_TIMEOUT
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'minutes', 'type': 'uint8',
                                   'range': [(0, 120)]}]},
       'get_sub_device_range': 0,
       'name': 'DATA_LOSS_TIMEOUT',
       'set_request': {'items': [{'name': 'mintes', 'type': 'uint8',
                                  'range': [(0, 120)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the DMX loss timeout parameter.',
       'value': 0x8008},

      #BACKLIGHT_TIMEOUT
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'seconds', 'type': 'uint8',
                                   'range': [(0, 241)],
                                   'labels': [(0, 'Always On'), (241, 'Always Off')],
                                   }]},
       'get_sub_device_range': 0,
       'name': 'BACKLIGHT_TIMEOUT',
       'set_request': {'items': [{'name': 'seconds', 'type': 'uint8',
                                  'range': [(0, 241)],
                                  'labels': [(0, 'Always On'), (241, 'Always Off')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the LCD backlight timeout parameter.',
       'value': 0x8009},

      #RDM_PROXY_ENABLE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'rdm_proxy_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'RDM_PROXY_ENABLED',
       'set_request': {'items': [{'name': 'rdm_proxy_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Enable / Disable the RDM proxy in a SHoW DMX transmitter or receiver.',
       'value': 0x800a},

      #INPUT_FORMAT
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'input_format', 'type': 'uint8',
                           'labels': [(0, 'DMX'), (1, 'ArtNet'),
                                     (2, 'E1.31'), (3, 'KiNet')],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'INPUT_FORMAT',
       'set_request': {'items': [{'name': 'input_format', 'type': 'uint8',
                                  'labels': [(0, 'DMX'), (1, 'ArtNet'),
                                            (2, 'E1.31'), (3, 'KiNet')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the input format of a SHoW DMX transmitter.',
       'value': 0x800b},

      #IP_ADDRESS
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'ip_address', 'type': 'uint32',}]},
       'get_sub_device_range': 2,
       'name': 'IP_ADDRESS',
       'set_request': {'items': [{'name': 'ip_address', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 2,
       'link': '',
       'notes': ('Get / Set IP addresses. Sub device ID 1 is the RDM monitoring '
                 'server. The root is the Transmitter Ethernet data input. '
                 'Data is in big endian format.'),
       'value': 0x800c},

      #IP_SUBNET_MASK
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'subnet_mask', 'type': 'uint32',}]},
       'get_sub_device_range': 2,
       'name': 'IP_SUBNET_MASK',
       'set_request': {'items': [{'name': 'subnet_mask', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 2,
       'link': '',
       'notes': ('Get / Set the subnet mask. Sub device ID 1 is the RDM monitoring '
                 'server. The root is the Transmitter Ethernet data input. '
                 'Data is in big endian format.'),
       'value': 0x800d},

      #IP_GATEWAY
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'default_gateway', 'type': 'uint32',}]},
       'get_sub_device_range': 2,
       'name': 'IP_GATEWAY',
       'set_request': {'items': [{'name': 'default_gateway', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 2,
       'link': '',
       'notes': ('Get / Set the default gateway. Sub device ID 1 is the RDM monitoring '
                 'server. The root is the Transmitter Ethernet data input. '
                 'Data is in big endian format.'),
       'value': 0x800e},

      #DHCP_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'dhcp_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'DHCP_MODE',
       'set_request': {'items': [{'name': 'dhcp_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Enable / Disable the DHCP client.',
       'value': 0x800f},

      #MAC_ADDRESS
      {'get_request': {'items': []},
       'get_response': {'items': [{'type': 'group',
                                   'name': 'languages',
                                   'max_size': 6,
                                   'min_size': 6,
                                   'items': [{'name': 'octet', 'type': 'uint8'}]
                        }]},
       'get_sub_device_range': 2,
       'name': 'MAC_ADDRESS',
       'set_request': {'items': [{'type': 'group',
                                  'name': 'languages',
                                  'max_size': 6,
                                  'min_size': 6,
                                  'items': [{'name': 'octet', 'type': 'uint8'}]
                       }]},
       'set_response': {'items': []},
       'set_sub_device_range': 2,
       'link': '',
       'notes': 'Get/Set the MAC address. Set is only allowed in debug mode.',
       'value': 0x8010},

      #SET_UID
      {'name': 'SET_UID',
       'set_request': {'items': [{'name': 'uid', 'type': 'uid'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Set the UID of the device. Only allowed in debug mode.',
       'value': 0x8014},

      #DMX_OUTPUT_STANDARD
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'output_format', 'type': 'uint8',
                           'labels': [(1, 'DMX512/199'), (2, 'DMX512-A'),
                                     (3, 'RDM E1.20-200')],
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'DMX_OUTPUT_STANDARD',
       'set_request': {'items': [{'name': 'output_format', 'type': 'uint8',
                                  'labels': [(1, 'DMX512/199'), (2, 'DMX512-A'),
                                            (3, 'RDM E1.20-200')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the output timing of a SHoW DMX receiver.',
       'value': 0x8015},

      #ADD_DISCOVERY
      {'name': 'ADD_DISCOVERY',
       'set_request': {'items': [{'name': 'enabled', 'type': 'uint8',
                                  'labels': [(1, 'On')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Sets a flag in the SHoW DMX transmitter to indicate that the '
                 'next proxy enable command should perform a GET_DEVICES '
                 'command only to known receivers'),
       'value': 0x8016},

      #DMX_INTERSLOT_TIME
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'micro_seconds', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'DMX_INTERSLOT_TIME',
       'set_request': {'items': [{'name': 'micro_seconds', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Get/Set the inter slot time in the DMX output of devices '
                 'transmitting DMX.'),
       'value': 0x8017},

      #LATENCY
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'latency_setting', 'type': 'uint8',
                           'labels': [(0, 'Normal'), (1, 'Low')]}]},
       'get_sub_device_range': 0,
       'name': 'LATENCY',
       'set_request': {'items': [{'name': 'latency_setting', 'type': 'uint8',
                                  'labels': [(0, 'Normal'), (1, 'Low')],
                      }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the Normal/Low Latency setting in SHoW DMX Neo products.',
       'value': 0x8019},

      #FACTORY_SETTINGS_LOCK
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lock_code', 'type': 'uint32'}]},
       'get_sub_device_range': 0,
       'name': 'FACTORY_SETTINGS_LOCK',
       'set_request': {'items': [{'name': 'lock_code', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Get/Set the factory settings lock. The factory settings '
                 'lock controls whether factory programmed settings that are '
                 'not to be changed by the customer can be changed.  An '
                 'example would be RDM UID or MAC addresses.'),
       'value': 0x801a},

      #DMX_RDM_INTERLEAVE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'interleave_ratio', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'DMX_RDM_INTERLEAVE',
       'set_request': {'items': [{'name': 'interleave_ratio', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Get/Set the inter slot time in the DMX to RDM interleave. '
                 'The value is the number of DMX frames sent before a RDM frame is sent.'),
       'value': 0x801b},

      #PROXIED_DEVICES_ENHANCED
      {'get_request': {'items': []},
       'get_response': {'items': [{
           'type': 'group',
           'name': 'uids',
           'items': [
               {'name': 'uid', 'type': 'uid'},
               {'name': 'control_bits', 'type': 'uint16'},
               {'name': 'binding_uid', 'type': 'uid'},
           ],
         }]},
       'get_sub_device_range': 0,
       'name': 'PROXIED_DEVICES_ENHANCED',
       'link': '',
       'notes': 'Get the entire list of proxied devices including control bits',
       'value': 0x801c},

      #ADAPTIVE_ON_OFF
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'ADAPTIVE_ON_OFF',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set adaptive hopping in Neo products.',
       'value': 0x801d},
    ],
  },

  #Howard Eaton Lighting
  {'id': 0x4845,
   'name': 'Howard Eaton Lighting',
   'pids': [
      #PWRUP_TEST
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'enabled', 'type': 'bool'},
                          {'name': 'max_allowed', 'type': 'uint8'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'PWRUP_TEST',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.goddarddesign.com/pdf_doc/rdmlabpack%20srn%20v2p9.pdf',
       'notes': 'Enable/disable the Power On Self Test (POST).',
       'value': 0xc857},

      #INTERNAL_STATS
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'dmx_nsc_packet_count', 'type': 'uint16'},
                          {'name': 'dmx_asc_packet_count', 'type': 'uint16'},
                          {'name': 'rdm_asc_packet_count', 'type': 'uint16'},
                          {'name': 'uart_errors', 'type': 'uint8'},
                          {'name': 'device_minutes', 'type': 'uint8'},
                          {'name': 'brownout_count', 'type': 'uint8'},
                          {'name': 'watchdog_resets', 'type': 'uint8'},
                          {'name': 'software_resets', 'type': 'uint8'},
                          {'name': 'dither_adjust', 'type': 'uint16'},
                          {'name': 'record_sensor_counts', 'type': 'uint8'},
                        ]},
       'get_sub_device_range': 0,
       'name': 'INTERNAL_STATS',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.goddarddesign.com/pdf_doc/rdmlabpack%20srn%20v2p9.pdf',
       'notes': 'Fetch the internal stats.',
       'value': 0xc862},
    ],
  },
  #JANDS
  {'id': 0x4a61,
   'name': 'Jands',
   'pids': [

      #NE_FAULT_DETECT_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'enabled', 'type': 'bool'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'NE_FAULT_DETECT_MODE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'Turns the Neutral-Earth (N-E) fault detector on and off.',
       'value': 0x8080},

      #DMX_PROTECT_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'DMX_PROTECT_MODE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'Unknown.',
       'value': 0x8082},

      #DMX_LOSS_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'mode', 'type': 'uint8',
                           'labels': [(0, 'Hold'), (1, 'Fade to scene #1')]
                          }
                        ]},
       'get_sub_device_range': 0,
       'name': 'DMX_LOSS_MODE',
       'set_request': {'items': [{'name': 'mode', 'type': 'uint8',
                                  'labels': [
                                      # TODO: check if we can use scene 2 as well
                                      (0, 'Hold'), (1, 'Fade to scene #1')]
                          }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'Controls the behaviour when the DMX signal is lost.',
       'value': 0x8084},

      #PREHEAT_LEVEL
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'level', 'type': 'uint8', 'labels': [
                            (0, 'Off')]
                          }
                        ]},
       'get_sub_device_range': 2,
       'name': 'PREHEAT_LEVEL',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8',
                                  'labels': [(0, 'Off')],
                                  'range': [(0, 0x32)],
                          }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'The Preheat function is used to  inject a small amount of power into the lamps when the control is set to zero.',
       'value': 0x8086},

      #OUTPUT_CAP_VALUE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'cap', 'type': 'uint8',
                           'labels': [(0, 'Off'),
                                     (1, '95%'),
                                     (2, '90%'),
                                     (3, '85%'),
                                     (4, '80%'),
                                     (5, '75%'),
                                     (6, '70%'),
                                     (7, '65%'),
                                     (8, '60%'),
                                     (9, '55%'),
                                     (10, '50%'),
                                     (11, '45%'),
                                     (12, '40%')],
                          }
                        ]},
       'get_sub_device_range': 2,
       'name': 'OUTPUT_CAP_VALUE',
       'set_request': {'items': [{'name': 'cap', 'type': 'uint8',
                                   'labels': [(0, 'Off'),
                                             (1, '95%'),
                                             (2, '90%'),
                                             (3, '85%'),
                                             (4, '80%'),
                                             (5, '75%'),
                                             (6, '70%'),
                                             (7, '65%'),
                                             (8, '60%'),
                                             (9, '55%'),
                                             (10, '50%'),
                                             (11, '45%'),
                                             (12, '40%'),
                                            ],
                          }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'Scale the output power of by a preset percentage. Each increment reduces output power by 5%, down to a minimum value of 40%. See the manual for more details on output voltage.',
       'value': 0x8088},

      #DMX_TERM_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'DMX_TERM_MODE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': 'http://www.jands.com.au/__data/assets/pdf_file/0004/36364/HPD_User_Manual_V2.0a.pdf',
       'notes': 'Enable DMX termination.',
       'value': 0x808A},
    ]
  },

  #MDG Fog Generators Ltd
  {'id': 0x4d44,
   'name': u"MDG Fog Generators Ltd.",
   'pids': [
      #MDG_NETWORK_UNIVERSE_NUMBER
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'universe_number', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'MDG_NETWORK_UNIVERSE_NUMBER',
       'set_request': {'items': [{'name': 'universe_number', 'type': 'uint16', 'range':  [(0, 128)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': '',
       'value': 0x8000},

      #MDG_NETWORK_UNIVERSE_NAME
      {'get_request': {'items': []},
        'get_response': {'items': [{'name': 'universe_name',
                                    'max_size': 32,
                                    'type': 'string'}]},
        'get_sub_device_range': 0,
        'name': 'MDG_NETWORK_UNIVERSE_NAME',
        'set_request': {'items': [{'name': 'universe_name',
                                   'max_size': 32,
                                   'type': 'string'}]},
        'set_response': {'items': []},
        'set_sub_device_range': 0,
        'value': 0x8001},

      #MDG_GENERATOR_STATE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'generator_state',
                                   'type': 'string',
                                   'max_size': 20}]},
        'get_sub_device_range': 0,
        'name': 'MDG_GENERATOR_STATE',
        'link': '',
        'notes': '',
        'value': 0x8002},
    ]
  },
  #Martin Professional
  {'id': 0x4d50,
   'name': 'Martin Professional A/S',
   'pids': [

      #DMX_LAMP_OFF_ENABLE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'DMX_LAMP_OFF_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the fixture will accept a lamp on/off command via the DMX protocol',
       'value': 0x8000},

      #DMX_RESET_ENABLE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'reset_mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Off'),
                                             (1, 'On'),
                                             (2, '5 second delay')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'DMX_RESET_ENABLE',
       'set_request': {'items': [{'name': 'reset_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Off'),
                                            (1, 'On'),
                                            (2, '5 second delay')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the fixture will accept a reset command via the DMX protocol.',
       'value': 0x8001},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'MCX_LAMP_OFF_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the fixture will treat key seven on the MCX as a lamp power-off button.',
       'value': 0x8002},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'STAND_ALONE_OPERATION_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the fixture is in stand-alone mode',
       'value': 0x8100},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Single Fixture'),
                                             (1, 'Master Fixture'),
                                             (2, 'Syncronized fixture')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'SYNCHRONIZED',
       'set_request': {'items': [{'name': 'sycronization_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Single Fixture'),
                                            (1, 'Master Fixture'),
                                            (2, 'Syncronized fixture')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the master / slave setting when in stand-alone mode.',
       'value': 0x8101},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'auto_program_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'AUTO_PROGRAM_ENABLE',
       'set_request': {'items': [{'name': 'auto_program_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Enable auto play for stand alone mode when power is applied.'
                 ' This requires STAND_ALONE_OPERATION_ENABLE to be on.'),
       'value': 0x8102},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'timer_settings',
                                   'type': 'uint8',
                                   'labels': [(0, 'No timers enabled'),
                                             (1, 'Timer 1 enabled'),
                                             (2, 'Timer 2 enabled'),
                                             (3, 'Timer 1 & Timer 2 enabled')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'ENABLE_TIMERS',
       'set_request': {'items': [{'name': 'timer_settings',
                                  'type': 'uint8',
                                  'labels': [(0, 'No timers enabled'),
                                            (1, 'Timer 1 enabled'),
                                            (2, 'Timer 2 enabled'),
                                            (3, 'Timer 1 & Timer 2 enabled')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Enable or disable the timers on the device.',
       'value': 0x8103},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'TIMER1_START_TIME',
       'set_request': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'The start time for Timer 1.',
       'value': 0x8104},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'TIMER1_END_TIME',
       'set_request': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'The end time for Timer 1.',
       'value': 0x8105},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'TIMER2_START_TIME',
       'set_request': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'The start time for Timer 2.',
       'value': 0x8106},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'TIMER2_END_TIME',
       'set_request': {'items': [{'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                                ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'The end time for Timer 2.',
       'value': 0x8107},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'LIGHTSENSOR_LEVEL_TRIGGER_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Enables the light sensor to start the stand alone program. '
                 'If both timers and light level are enabled, both conditions '
                 'have to be met to start the stand alone program.'),
       'value': 0x8108},


      {'name': 'CAPTURE_CURRENT_SENSOR_VALUE',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Capture the current light level and set this as the '
                 'threshold for the light trigger.'),
       'value': 0x8109},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'trigger_level', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'LIGHTSENSOR_TRIGGER_LEVEL',
       'set_request': {'items': [{'name': 'trigger_level', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get/Set the value at which the light level sensor triggers.',
       'value': 0x810a},


      {'name': 'ADD_SCENE',
       'set_request': {'items': []},
       'set_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Add a scene at the end of the scene list. The response '
                 'includes the current scene number and the total number '
                 'of scenes.'),
       'value': 0x8200},


      {'name': 'INSERT_SCENE',
       'set_request': {'items': []},
       'set_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Insert a scene before the current scene. The response '
                 'includes the current scene number and the total number '
                 'of scenes.'),
       'value': 0x8201},


      {'name': 'STORE_SCENE',
       'set_request': {'items': []},
       'set_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Store the current values for the current scene. The response'
                 ' includes the current scene number and the total number '
                 'of scenes.'),
       'value': 0x8202},


      {'name': 'DELETE_SCENE',
       'set_request': {'items': []},
       'set_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Delete the current scene. The response includes the current '
                 'scene number and the total number of scenes.'),
       'value': 0x8203},


      {'name': 'DELETE_ALL_SCENES',
       'set_request': {'items': []},
       'set_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Delete all scenes. The response includes the current '
                 'scene number and the total number of scenes.'),
       'value': 0x8204},


      {'name': 'NEXT_SCENE',
       'get_request': {'items': []},
       'get_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'link': '',
       'notes': ('Move to the next scene. The response includes the current '
                 'scene number and the total number of scenes.'),
       'value': 0x8205},


      {'name': 'PREVIOUS_SCENE',
       'get_request': {'items': []},
       'get_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'link': '',
       'notes': ('Move to the previous scene. The response includes the '
                 'current scene number and the total number of scenes.'),
       'value': 0x8206},


      {'name': 'SCENE_SETTINGS',
       'get_request': {'items': []},
       'get_response': {'items': [{'type': 'group',
                                   'name': 'scene_settings',
                                   'items': [{'name': 'setting', 'type': 'uint8'}]
                                   }]},
       'get_sub_device_range': 0,
       'link': '',
       'notes': 'Get the scene settings for the current scene.',
       'value': 0x8207},


      {'name': 'RUN_PROGRAM',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Start running the programmed scenes in the stand alone program.',
       'value': 0x8208},


      {'name': 'SCENE_NUMBER',
       'get_request': {'items': []},
       'get_response': {'items': [{'name': 'current_scene', 'type': 'uint8'},
                                  {'name': 'total_scenes', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'link': '',
       'notes': 'Get the current scene number and total number of scenes.',
       'value': 0x820A},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hours', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minutes', 'type': 'uint8', 'range': [(0, 59)]},
                                  {'name': 'seconds', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'SCENE_WAIT_TIME',
       'set_request': {'items': [{'name': 'hours', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minutes', 'type': 'uint8', 'range': [(0, 59)]},
                                 {'name': 'seconds', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls the wait time for the current scene. Some fixtures '
                 'may not support up to 24 hours of wait time.'),
       'value': 0x820b},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'hours', 'type': 'uint8', 'range': [(0, 23)]},
                                  {'name': 'minutes', 'type': 'uint8', 'range': [(0, 59)]},
                                  {'name': 'seconds', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'get_sub_device_range': 0,
       'name': 'SCENE_FADE_TIME',
       'set_request': {'items': [{'name': 'hours', 'type': 'uint8', 'range': [(0, 23)]},
                                 {'name': 'minutes', 'type': 'uint8', 'range': [(0, 59)]},
                                 {'name': 'seconds', 'type': 'uint8', 'range': [(0, 59)]},
                                 ]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls the fade time for the current scene. Some fixtures '
                 'may not support up to 24 hours of fade time.'),
       'value': 0x820c},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'intensity', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_INTENSITY',
       'set_request': {'items': [{'name': 'intensity', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the intensity for the current scene.',
       'value': 0x820d},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_CYAN',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the cyan level for the current scene.',
       'value': 0x820e},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_MAGENTA',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the magenta level for the current scene.',
       'value': 0x820f},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_YELLOW',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the yellow level for the current scene.',
       'value': 0x8210},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_RED',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the red level for the current scene.',
       'value': 0x8211},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_GREEN',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the green level for the current scene.',
       'value': 0x8212},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_BLUE',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the blue level for the current scene.',
       'value': 0x8213},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_AMBER',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the amber level for the current scene.',
       'value': 0x8214},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_WHITE',
       'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the white level for the current scene.',
       'value': 0x8215},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'zoom', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_ZOOM',
       'set_request': {'items': [{'name': 'zoom', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the zoom setting for the scene.',
       'value': 0x8216},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'focus', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_FOCUS',
       'set_request': {'items': [{'name': 'focus', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the focus setting for the scene.',
       'value': 0x8217},

# This doesn't have a pid defined in the document
#      {'get_request': {'items': []},
#       'get_response': {'items': [{'name': 'color_mode',
#                                   'type': 'uint8',
#                                   'labels': [(0, 'White'),
#                                             (1, 'Amber'),
#                                             (2, 'red'),
#                                             (3, 'Green'),
#                                             (4, 'Blue')],
#                                  }]},
#       'get_sub_device_range': 0,
#       'name': 'SCENE_COLOR',
#       'set_request': {'items': [{'name': 'color_mode',
#                                  'type': 'uint8',
#                                  'labels': [(0, 'White'),
#                                            (1, 'Amber'),
#                                            (2, 'red'),
#                                            (3, 'Green'),
#                                            (4, 'Blue')],
#                                  }]},
#       'set_response': {'items': []},
#       'set_sub_device_range': 0,
#       'link': '',
#       'notes': 'Controls the color mode for the current scene.',
#       'value': 0x},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'color_wheel',
                                   'type': 'uint8',
                                   'labels': [(0, 'Random colors off'),
                                             (1, 'CMY slow'),
                                             (2, 'CMY medium'),
                                             (3, 'CMY fast'),
                                             (4, 'Magenta/Yellow slow'),
                                             (5, 'Magenta/Yellow medium'),
                                             #(4, 'Magenta/Yellow fast'),
                                             (6, 'Cyan/Magenta slow'),
                                             (7, 'Cyan/Magenta medium'),
                                             (8, 'Cyan/Magenta fast'),
                                             (9, 'Cyan/Yellow slow'),
                                             (10, 'Cyan/Yellow medium'),
                                             (11, 'Cyan/Yellow fast')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'SCENE_RANDOM_COLOR',
       'set_request': {'items': [{'name': 'color_wheel',
                                  'type': 'uint8',
                                  'labels': [(0, 'Random colors off'),
                                            (1, 'CMY slow'),
                                            (2, 'CMY medium'),
                                            (3, 'CMY fast'),
                                            (4, 'Magenta/Yellow slow'),
                                            (5, 'Magenta/Yellow medium'),
                                            #(4, 'Magenta/Yellow fast'),
                                            (6, 'Cyan/Magenta slow'),
                                            (7, 'Cyan/Magenta medium'),
                                            (8, 'Cyan/Magenta fast'),
                                            (9, 'Cyan/Yellow slow'),
                                            (10, 'Cyan/Yellow medium'),
                                            (11, 'Cyan/Yellow fast')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the random color setting for the current scene.',
       'value': 0x8218},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'color_wheel',
                                   'type': 'uint8',
                                   'labels': [(0, 'White (Open)'),
                                             (1, 'Color 1'),
                                             (2, 'Color 2'),
                                             (3, 'Color 3'),
                                             (4, 'Color 4'),
                                             (5, 'Color 5')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'SCENE_COLOR_WHEEL',
       'set_request': {'items': [{'name': 'color_wheel',
                                  'type': 'uint8',
                                  'labels': [(0, 'White (Open)'),
                                            (1, 'Color 1'),
                                            (2, 'Color 2'),
                                            (3, 'Color 3'),
                                            (4, 'Color 4'),
                                            (5, 'Color 5')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the color wheel for the current scene.',
       'value': 0x8219},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'gobo_wheel',
                                   'type': 'uint8',
                                   'labels': [(0, 'White (Open)'),
                                             (1, 'Gobo 1'),
                                             (2, 'Gobo 2'),
                                             (3, 'Gobo 3'),
                                             (4, 'Gobo 1 rotation'),
                                             (5, 'Gobo 2 rotation'),
                                             (6, 'Gobo 3 rotation')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'SCENE_GOBO_SELECTION',
       'set_request': {'items': [{'name': 'gobo_wheel',
                                  'type': 'uint8',
                                  'labels': [(0, 'White (Open)'),
                                            (1, 'Gobo 1'),
                                            (2, 'Gobo 2'),
                                            (3, 'Gobo 3'),
                                            (4, 'Gobo 1 rotation'),
                                            (5, 'Gobo 2 rotation'),
                                            (6, 'Gobo 3 rotation')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the gobo wheel for the current scene.',
       'value': 0x821a},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'gobo_index', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_GOBO_INDEXING',
       'set_request': {'items': [{'name': 'gobo_index', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the gobo index for the current scene.',
       'value': 0x821b},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'animation_position', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_ANIMATION_POSITION',
       'set_request': {'items': [{'name': 'animation_position', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the animation position for the current scene.',
       'value': 0x821c},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'animation_indexing', 'type': 'uint8'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_ANIMATION_INDEXING',
       'set_request': {'items': [{'name': 'animation_indexing', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the animation indexing for the current scene.',
       'value': 0x821d},


      {'name': 'SCENE_GET_DMX',
       'set_request': {'items': [{'name': 'capture_dmx', 'type': 'uint8',
                                  'labels': [(0, 'Add to the end of the scene list'),
                                            (1, 'Insert before the current scene')],
                                }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Record the current DMX values and save it as a scene.',
       'value': 0x821e},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'frost_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'SCENE_FROST_ENABLE',
       'set_request': {'items': [{'name': 'frost_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the frost setting for the current scene.',
       'value': 0x821f},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'shutter_blackout_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'AUTO_SHUTTER_BO_ENABLE',
       'set_request': {'items': [{'name': 'shutter_blackout_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the shutter is closed when dimming.',
       'value': 0x8300},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'effect_speed',
                                   'type': 'uint8',
                                   'labels': [(0, 'Follow pan/tilt speed'),
                                             (1, 'Normal Speed'),
                                             (2, 'Fast Speed'),
                                             (3, 'Slow Speed'),
                                             (4, 'Safe Speed')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'EFFECT_SPEED',
       'set_request': {'items': [{'name': 'effect_speed',
                                  'type': 'uint8',
                                  'labels': [(0, 'Follow pan/tilt speed'),
                                            (1, 'Normal Speed'),
                                            (2, 'Fast Speed'),
                                            (3, 'Slow Speed'),
                                            (4, 'Safe Speed')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the effect speed of the fixture.',
       'value': 0x8301},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'effect_shortcuts_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'EFFECT_SHORTCUTS_ENABLE',
       'set_request': {'items': [{'name': 'effect_shortcuts_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if effect shortcuts are enabled.',
       'value': 0x8302},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'effect_feedback_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'EFFECT_FEEDBACK_ENABLE',
       'set_request': {'items': [{'name': 'effect_feedback_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if effect feedback is enabled.',
       'value': 0x8303},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lamp_warning_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'LAMP_HOUR_WARNING_ENABLE',
       'set_request': {'items': [{'name': 'lamp_warning_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls if the fixture will trigger a lamp warning when '
                 ' the configured lamp hour value is reached.'),
       'value': 0x8304},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lamp_hours', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'LAMP_HOUR_WARNING_HOURS',
       'set_request': {'items': [{'name': 'lamp_hours', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the lamp hours limit for the warning message.',
       'value': 0x8305},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'air_filter_hours', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'AIR_FILTER_HOUR',
       'set_request': {'items': [{'name': 'air_filter_hours', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Get or Set the air filter hours.',
       'value': 0x8306},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'air_filter_hours', 'type': 'uint16'}]},
       'get_sub_device_range': 0,
       'name': 'AIR_FILTER_HOUR_WARNING_HOURS',
       'set_request': {'items': [{'name': 'air_filter_hours', 'type': 'uint16'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the air filter hours limit for the warning message.',
       'value': 0x8307},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enable_error_display', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'DISPLAY_ERRORS_ENABLE',
       'set_request': {'items': [{'name': 'enable_error_display', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls if the fixture will flash error messages on the'
                 ' display.'),
       'value': 0x8308},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lamp_error_test_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'LAMP_ERROR_TEST_ENABLE',
       'set_request': {'items': [{'name': 'lamp_error_test_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls if the temperature sensor in the head is used to '
                 'test if the lamp is actually on or off.'),
       'value': 0x8309},


      {'name': 'SAVE_CUSTOM_CONFIGURATION',
       'set_request': {'items': [{'name': 'configuration_number',
                                  'type': 'uint8',
                                  'range': [(0, 255)],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Saves the user settings as a configuration.',
       'value': 0x830a},


      {'name': 'LOAD_CUSTOM_CONFIGURATION',
       'set_request': {'items': [{'name': 'configuration_number',
                                  'type': 'uint8',
                                  'range': [(0, 255)],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Loads the user settings from a saverd configuration.',
       'value': 0x830b},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'barndoor_software_version',
                                   'type': 'string',
                                   'min_size': 6,
                                   'max_size': 32}]},
        'get_sub_device_range': 2,
        'name': 'BARNDOOR_SOFTWARE_VERSION',
        'link': '',
        'notes': 'Get the version of the barndoor software.',
        'value': 0x830c},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'cmy_blackout_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'CMY_BLACKOUT_ENABLE',
       'set_request': {'items': [{'name': 'cmy_blackout_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls if CMY blackout is enabled. Enabling this setting '
                 'will active CMY blackout 3 seconds after the shutter closes '
                 'to 0% intensity.'),
       'value': 0x830d},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'tracking_mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Absolute delta value algorithm'),
                                             (1, 'Real delta value algorithm')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'TRACKING_MODE',
       'set_request': {'items': [{'name': 'tracking_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Absolute delta value algorithm'),
                                            (1, 'Real delta value algorithm')],
                                }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the tracking mode of the fixture',
       'value': 0x830e},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'tracking_mode',
                                   'type': 'uint8',
                                   'range': [(1, 10)],
                                 }]},
       'get_sub_device_range': 0,
       'name': 'TRACKING_CAL',
       'set_request': {'items': [{'name': 'tracking_mode',
                                  'type': 'uint8',
                                  'range': [(1, 10)],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the tracking sample rate',
       'value': 0x830f},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'dimmer_curve',
                                   'type': 'uint8',
                                   'range': [(0, 255)],
                                   'labels': [(0, 'Optical linear'),
                                             (1, 'Square law'),
                                             (2, 'Inverse square law'),
                                             (3, 'S-curve')],
                                 }]},
       'get_sub_device_range': 0,
       'name': 'DIMMER_CURVE',
       'set_request': {'items': [{'name': 'dimmer_curve',
                                  'type': 'uint8',
                                  'range': [(0, 255)],
                                  'labels': [(0, 'Optical linear'),
                                            (1, 'Square law'),
                                            (2, 'Inverse square law'),
                                            (3, 'S-curve')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the dimmer curve',
       'value': 0x8310},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'focus_tracking',
                                   'type': 'uint8',
                                   'labels': [(0, 'Focus tracking off'),
                                             (1, 'Focus tracking range is near'),
                                             (2, 'Focus tracking range is medium'),
                                             (3, 'Focus tracking range is far')],
                                 }]},
       'get_sub_device_range': 0,
       'name': 'FOCUS_TRACKING',
       'set_request': {'items': [{'name': 'focus_tracking',
                                  'type': 'uint8',
                                  'labels': [(0, 'Focus tracking off'),
                                            (1, 'Focus tracking range is near'),
                                            (2, 'Focus tracking range is medium'),
                                            (3, 'Focus tracking range is far')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls the focus tracking mode when controlling the '
                 "fixture's zoom and focus via its DMX protocol."),
       'value': 0x8311},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'display_auto_off',
                                   'type': 'uint8',
                                   'labels': [(0, 'Display is always on'),
                                             (1, 'Display off after 2 minutes'),
                                             (2, 'Display off after 5 minutes'),
                                             (3, 'Display off after 10 minutes')],
                                 }]},
       'get_sub_device_range': 0,
       'name': 'DISPLAY_AUTO_OFF',
       'set_request': {'items': [{'name': 'display_auto_off',
                                  'type': 'uint8',
                                  'labels': [(0, 'Display is always on'),
                                            (1, 'Display off after 2 minutes'),
                                            (2, 'Display off after 5 minutes'),
                                            (3, 'Display off after 10 minutes')],
                                }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': ('Controls the focus tracking mode when controlling the '
                 "fixture's zoom and focus via its DMX protocol."),
       'value': 0x8312},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lamp_preheat_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'LAMP_PREHEAT_ENABLE',
       'set_request': {'items': [{'name': 'lamp_preheat_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if lamp pre-heating is on.',
       'value': 0x8313},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'preheat_value',
                                   'type': 'uint8',
                                   'range': [(0, 20)],
                                 }]},
       'get_sub_device_range': 0,
       'name': 'LAMP_PREHEAT_VALUE',
       'set_request': {'items': [{'name': 'preheat_value',
                                  'type': 'uint8',
                                  'range': [(0, 20)],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the lamp pre-heat value as a percentage.',
       'value': 0x8314},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'economy_mode_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'LAMP_POWER_ENABLE',
       'set_request': {'items': [{'name': 'economy_mode_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if economy mode is on.',
       'value': 0x8315},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'lamp_power_value',
                                   'type': 'uint8',
                                   'range': [(70, 100)],
                                }]},
       'get_sub_device_range': 0,
       'name': 'LAMP_POWER_VALUE',
       'set_request': {'items': [{'name': 'lamp_power_value',
                                  'type': 'uint8',
                                  'range': [(70, 100)],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the lamp power value as a percentage.',
       'value': 0x8316},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'iris_blackout_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'IRIS_BLACKOUT_ENABLE',
       'set_request': {'items': [{'name': 'iris_blackout_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if iris blackout mode is enabled.',
       'value': 0x8317},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'color_wheel_blackout_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'COLOR_WHEEL_BLACKOUT_ENABLE',
       'set_request': {'items': [{'name': 'color_wheel_blackout_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if color wheel blackout mode is enabled.',
       'value': 0x8318},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'studio_mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Disabled'),
                                             (1, 'Enabled'),
                                             (2, 'Silent Mode')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'STUDIO_MODE',
       'set_request': {'items': [{'name': 'studio_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Disabled'),
                                            (1, 'Enabled'),
                                            (2, 'Silent Mode')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls studio mode is enabled.',
       'value': 0x8319},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'block_temperature_setting',
                                   'type': 'uint8',
                                   'labels': [(0, 'Low'),
                                             (1, 'Normal'),
                                             (2, 'High')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'BLOCK_TEMP_SETTING',
       'set_request': {'items': [{'name': 'block_temperature_setting',
                                  'type': 'uint8',
                                  'labels': [(0, 'Low'),
                                            (1, 'Normal'),
                                            (2, 'High')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the setting for the block temperature.',
       'value': 0x831a},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Normal'),
                                             (1, 'Fast'),
                                             (2, 'Slow')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'PAN_TILT_SPEED',
       'set_request': {'items': [{'name': 'mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Normal'),
                                            (1, 'Fast'),
                                            (2, 'Slow')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the pan/tilt speed.',
       'value': 0x8400},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'PAN_TILT_MOVE_ON_RESET_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the fixture will pan and tilt when performing an effect reset',
       'value': 0x8401},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'PAN_TILT_LIMITATION_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if pan/tilt limits are enabled.',
       'value': 0x8402},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'pan_minimum', 'type': 'int16', 'range':  [(0, 360)]}]},
       'get_sub_device_range': 0,
       'name': 'PAN_LIMITATION_MINIMUM',
       'set_request': {'items': [{'name': 'pan_minimum', 'type': 'int16', 'range': [(0, 360)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the minimum pan limit.',
       'value': 0x8403},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'pan_maximum', 'type': 'int16', 'range':  [(0, 360)]}]},
       'get_sub_device_range': 0,
       'name': 'PAN_LIMITATION_MAXIMUM',
       'set_request': {'items': [{'name': 'pan_maximum', 'type': 'int16', 'range': [(0, 360)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the maximum pan limit.',
       'value': 0x8404},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'tilt_minimum', 'type': 'int16', 'range': [(-134, 134)]}]},
       'get_sub_device_range': 0,
       'name': 'TILT_LIMITATION_MINIMUM',
       'set_request': {'items': [{'name': 'tilt_minimum', 'type': 'int16', 'range': [(-134, 134)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the minimum tilt limit.',
       'value': 0x8405},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'tilt_maximum', 'type': 'int16', 'range': [(-134, 134)]}]},
       'get_sub_device_range': 0,
       'name': 'TILT_LIMITATION_MAXIMUM',
       'set_request': {'items': [{'name': 'tilt_maximum', 'type': 'int16', 'range': [(-134, 134)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the maximum tilt limit.',
       'value': 0x8406},

      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Inside limits'),
                                             (1, 'Outside limits')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'PAN_TILT_LIMITATION_AREA',
       'set_request': {'items': [{'name': 'mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Inside limits'),
                                            (1, 'Outside limits')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls if the pan/tilt range is inside or outside the limits.',
       'value': 0x8407},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'FOLLOW_SPOT_MODE_ENABLE',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Used to enable the follow spot feature.',
       'value': 0x8500},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'FOLLOW_SPOT_MODE_LOCK_TOGGLE',
       'set_request': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Used to toggle the follow spot lock',
       'value': 0x8501},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'FOLLOW_SPOT_MODE_LOCK_PAN',
       'set_request': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the pan lock for follow spot mode.',
       'value': 0x8502},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'FOLLOW_SPOT_MODE_LOCK_TILT',
       'set_request': {'items': [{'name': 'locked', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the tilt lock for follow spot mode.',
       'value': 0x8503},


#      {'get_request': {'items': [{'name': 'string_number', 'type': 'uint16'}]},
#       'get_response': {'items': [{'name': 'string_number', 'type': 'uint16'},
#                                  {'name': 'string_length', 'type': 'uint16'},
#                                  {'name': 'multiplier', 'type': 'uint16'},
#                                  {'name': 'dmx_start_address', 'type': 'uint16'},
#                                ]},
#       'get_sub_device_range': 0,
#       'name': 'NODE_GENERAL_SETUP',
#       'set_request': {'items': [{'name': 'string_number', 'type': 'uint16'},
#                                 {'name': 'string_length', 'type': 'uint16'},
#                                 {'name': 'multiplier', 'type': 'uint16'},
#                                 {'name': 'dmx_start_address', 'type': 'uint16'},
#                                ]},
#       'set_response': {'items': []},
#       'set_sub_device_range': 0,
#       'link': '',
#       'notes': 'Get or set the general settings for a node.',
#       'value': 0x8601},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'regulate_fan_speed', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'REGULATE_LAMP_FAN',
       'set_request': {'items': [{'name': 'regulate_fan_speed', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Regulate the lamp fan speed.',
       'value': 0x8600},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'regulate_fan_speed', 'type': 'bool'}]},
       'get_sub_device_range': 0,
       'name': 'REGULATE_GOBO_FAN',
       'set_request': {'items': [{'name': 'regulate_fan_speed', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Regulate the gobo fan speed.',
       'value': 0x8601},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'cooling_level',
                                   'type': 'uint8',
                                   'labels': [(0, '50%'),
                                             (1, '80%')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'LAMP_COOLING',
       'set_request': {'items': [{'name': 'cooling_level',
                                  'type': 'uint8',
                                  'labels': [(0, '50%'),
                                            (1, '80%')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the lamp cooling level.',
       'value': 0x8602},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'fan_clean_mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Off'),
                                             (1, 'Auto'),
                                             (2, 'Forced')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'FAN_CLEAN',
       'set_request': {'items': [{'name': 'fan_clean_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Off'),
                                            (1, 'Auto'),
                                            (2, 'Forced')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Set the fan cleaning mode.',
       'value': 0x8603},


      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'fan_mode',
                                   'type': 'uint8',
                                   'labels': [(0, 'Normal'),
                                             (1, 'Silent'),
                                             (2, 'Full'),
                                             (3, 'Regulated')],
                                  }]},
       'get_sub_device_range': 0,
       'name': 'FAN_MODE',
       'set_request': {'items': [{'name': 'fan_mode',
                                  'type': 'uint8',
                                  'labels': [(0, 'Normal'),
                                            (1, 'Silent'),
                                            (2, 'Full'),
                                            (3, 'Regulated')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Set the fan mode.',
       'value': 0x8604},


      {'name': 'SERIAL_NUMBER',
       'get_request': {'items': []},
       'get_response': {'items': [{'name': 'serial', 'type': 'string', 'max_size': 32,}]},
       'get_sub_device_range': 0,
       'link': '',
       'notes': 'Get the serial number for the device.',
       'value': 0x8700},


      {'name': 'EVENT_LOG_USER_EVENT_TRIGGER',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Triggers the addition of dynamic content to the event log.',
       'value': 0x8702},
    ],
  },
  {'id': 0x7a70,
   'name': 'Open Lighting',
   'pids': [

      #SERIAL_NUMBER
      {'name': 'SERIAL_NUMBER',
       'set_request': {'items': [{'name': 'serial_number', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://opendmx.net/index.php/Open_Lighting_PIDs',
       'notes': 'Sets the serial number (UID) of the device.',
       'value': 0x8000},

      #CODE_VERSION
      {'name': 'CODE_VERSION',
       'get_request': {'items': []},
       'get_response': {'items': [{'name': 'code_version',
                                   'max_size': 32,
                                   'type': 'string'}]},
       'get_sub_device_range': 2,
       'link': 'http://opendmx.net/index.php/Open_Lighting_PIDs',
       'notes': 'Gets the current version of the OLA code that is running.',
       'value': 0x8001},
    ],
  },
  {'id': 21324,
   'name': 'Soundlight',
   'pids': [

      #DMX_HOLD_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'mode', 'type': 'uint8'}]},
       'get_sub_device_range': 2,
       'name': 'DMX_HOLD_MODE',
       'set_request': {'items': [{'name': 'mode', 'type': 'uint8', 'labels': [
                          (0, 'Outputs to 0%'), (1, 'Output to 100%'),
                          (2, 'Hold'), (3, 'Go to predefined scene')],
                        }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Controls the behavior of the device when the signal fails.',
       'value': 0x80f1},

     #SLOT_LABELS
     {'get_request': {'items': [{'name': 'slot_number', 'type': 'uint16'}]},
      'get_response': {'items': [{'name': 'slot_number', 'type': 'uint16'},
                                 {'name': 'name', 'max_size': 16, 'type': 'string'}]},
      'get_sub_device_range': 2,
      'set_request': {'items': [{'name': 'slot_number', 'type': 'uint16'},
                                 {'name': 'name', 'max_size': 16, 'type': 'string'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'name': 'SLOT_LABELS',
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Sets the description (label) for a DMX512 slot.',
       'value': 0x8121},

     #MODIFY_SENSOR_DEFINITION
     {'get_request': {'items': [{'name': 'sensor_number', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'sensor_number', 'type': 'uint8'},
                                  {'name': 'type', 'type': 'uint8'},
                                  {'name': 'unit', 'type': 'uint8'},
                                  {'name': 'prefix', 'type': 'uint8'},
                                  {'name': 'range_min', 'type': 'uint16'},
                                  {'name': 'range_max', 'type': 'uint16'},
                                  {'name': 'normal_min', 'type': 'uint16'},
                                  {'name': 'normal_max', 'type': 'uint16'},
                                  {'name': 'supports_recording',
                                   'type': 'uint8'},
                                  {'name': 'name',
                                   'max_size': 20,
                                   'type': 'string'}]},
       'get_sub_device_range': 2,
       'set_request': {'items': [{'name': 'sensor_number', 'type': 'uint8'},
                                 {'name': 'type', 'type': 'uint8'},
                                 {'name': 'unit', 'type': 'uint8'},
                                 {'name': 'prefix', 'type': 'uint8'},
                                 {'name': 'range_min', 'type': 'uint16'},
                                 {'name': 'range_max', 'type': 'uint16'},
                                 {'name': 'normal_min', 'type': 'uint16'},
                                 {'name': 'normal_max', 'type': 'uint16'},
                                 {'name': 'supports_recording',
                                  'type': 'uint8'},
                                 {'name': 'name',
                                  'max_size': 20,
                                  'type': 'string'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 2,
       'name': 'MODIFY_SENSOR_DEFINITION',
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Used for setting a sensor definition for devices with variable sensor input. The SENSOR_DEFINITION PID in the E1.20 standard can read a sensor standard definition only, but not set.',
       'value': 0x8200},

      #DC_CALIBRATION
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'scale_value', 'type': 'uint8'}]},
       'get_sub_device_range': 2,
       'name': 'DC_CALIBRATION',
       'set_request': {'items': [{'name': 'scale_value', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'With the parameters, the outputs can be scaled to the desired maximum value',
       'value': 0xdcca},

      #NETWORK_ADDRESS
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'ip_address', 'type': 'uint32'}]},
       'get_sub_device_range': 2,
       'name': 'NETWORK_ADDRESS',
       'set_request': {'items': [{'name': 'ip_address', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Get / Set the IP Address',
       'value': 0x8801},

      #NETWORK_MASK
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'net_mask', 'type': 'uint32'}]},
       'get_sub_device_range': 2,
       'name': 'NETWORK_MASK',
       'set_request': {'items': [{'name': 'net_mask', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Get / Set the subnet mask',
       'value': 0x8802},

      #GATEWAY_ADDRESS
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'gateway_address', 'type': 'uint32'}]},
       'get_sub_device_range': 2,
       'name': 'GATEWAY_ADDRESS',
       'set_request': {'items': [{'name': 'gateway_address', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Get / Set the address of the default gateway.',
       'value': 0x8803},

      #DNS_ADDRESS
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'dns_address', 'type': 'uint32'}]},
       'get_sub_device_range': 2,
       'name': 'DNS_ADDRESS',
       'set_request': {'items': [{'name': 'dns_address', 'type': 'uint32'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'Get / Set the address of the DNS server.',
       'value': 0x8804},

      #DC_OFFSET
      {'get_request': {'items': []},
       'get_response': {'items': [{'type': 'group',
                                   'name': 'dc_offsets',
                                   'items': [{'name': 'offset_value', 'type': 'uint8'}]
                        }]},
       'get_sub_device_range': 2,
       'name': 'DC_OFFSET',
       'set_request': {'items': [{'type': 'group',
                                  'name': 'dc_offsets',
                                  'items': [{'name': 'offset_value', 'type': 'uint8'}]
                        }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'With the parameters, the offset adjustment of the outputs are set to the desired value. It is transmitted as many values as outputs must be set. The number is determined by the parameters length (PDL).  The offset input is especially useful when driving LEDs with a different starting point',
       'value': 0xdc0e},

      #DC_FADER_OFFSET
      {'name': 'DC_FADER_OFFSET',
        'set_request': {'items': [{'type': 'group',
                                   'name': 'offsets',
                                   'items': [{'name': 'offset_value', 'type': 'uint8'}]
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'With the parameters, the offset adjustment of the outputs are set to the desired value. The values are collected directly from the DMX input (the last valid zero weather package). There are are as many values as outputs must be set. The acquisition is initiated by the command. A reading is possible with the function DC_OFFSET. ',
       'value': 0xdc0f},

      #CURVE_DEFINITION
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'curve_number', 'type': 'uint8'},
                          {'name': 'total_curves', 'type': 'uint8'},
                          {'name': 'segment_count', 'type': 'uint8'},
                          {'name': 'interpolation_method', 'type': 'uint8',
                           'labels': [(0, 'Step'), (1, 'Linear'), (2, 'Square'), (3, 'Cubic')],
                          },
                          {'name': 'start_value', 'type': 'uint8'},
                          {'name': 'curve_values',
                           'type': 'group',
                           'items': [
                             {'name': 'value', 'type': 'uint8'},
                           ],
                          },
                        ]},
       'get_sub_device_range': 2,
       'name': 'CURVE_DEFINITION',
       'set_request': {'items': [
                         {'name': 'curve_number', 'type': 'uint8'},
                         {'name': 'total_curves', 'type': 'uint8'},
                         {'name': 'segment_count', 'type': 'uint8'},
                         {'name': 'interpolation_method', 'type': 'uint8',
                          'labels': [(0, 'Step'), (1, 'Linear'), (2, 'Square'), (3, 'Cubic')],
                         },
                         {'name': 'start_value', 'type': 'uint8'},
                         {'name': 'curve_values',
                          'type': 'group',
                          'items': [
                            {'name': 'value', 'type': 'uint8'},
                          ],
                         },
                       ]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': 'http://www.soundlight.de/techtips/dmx512/slh_rdm_commands.htm',
       'notes': 'The number of values supplied needs to match what\' specified in the segment_count field',
       'value': 0xdccd},
   ]
  },
  {'id': 0x4c55,
   'name': 'Lumen Radio',
   'pids': [

      #FULL_DISCOVERY
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'enabled', 'type': 'bool'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'FULL_DISCOVERY',
       'set_request': {'items': [{'name': 'enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Starts full RDM discovery.',
       'value': 0x8000},
      # 0x8001 exists but we can't get a description for it

      #OUTPUT_DEFAULT_VALUE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'dmx_level', 'type': 'uint8'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'OUTPUT_DEFAULT_VALUE',
       'set_request': {'items': [{'name': 'dmx_level', 'type': 'uint8'}]},
       'set_response': {'items': [{'name': 'dmx_level', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Sets the output level to use when there is no DMX signal',
       'value': 0x8002},

      #DALI_FADE_TIME
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'fade_time', 'type': 'uint8'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'DALI_FADE_TIME',
       'set_request': {'items': [{'name': 'fade_time', 'type': 'uint8'}]},
       'set_response': {'items': [{'name': 'fade_time', 'type': 'uint8'}]},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Sets the DALI fade time.',
       'value': 0x8003},

      #INCREMENTAL_DISCOVERY_INTERVAL
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'interval', 'type': 'uint16',
                           'multiplier': -1},
                        ]},
       'get_sub_device_range': 0,
       'name': 'INCREMENTAL_DISCOVERY_INTERVAL',
       'set_request': {'items': [{'name': 'interval', 'type': 'uint16',
                                  'range': [(0x101, 0xffff)],
                                  'multiplier': -1,
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Controls the frequency at which incremental discovery runs.',
       'value': 0x8101},

      #ACK_TIMER_FACTOR
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'timer_factor', 'type': 'uint16'}
                        ]},
       'get_sub_device_range': 0,
       'name': 'ACK_TIMER_FACTOR',
       'set_request': {'items': [{'name': 'timer_factor', 'type': 'uint16',
                                  'range': [(0x101, 0xffff)],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 0,
       'link': '',
       'notes': 'Unknown.',
       'value': 0x8102},
    ],
  },
  {'id': 0x6574,
   'name': 'ETC',
   'pids': [

      #ETC_LED_CURVE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'curve_setting',
                           'type': 'uint8',
                           'labels': [(0, 'Standard'),
                                     (1, 'Incandescent'),
                                     (2, 'Linear Response'),
                                     (3, 'Quick Curve (No Smoothing)')],
                        }]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_CURVE',
       'set_request': {'items': [{'name': 'curve_setting', 'type': 'uint8',
                                  'labels': [(0, 'Standard'),
                                            (1, 'Incandescent'),
                                            (2, 'Linear Response'),
                                            (3, 'Quick Curve (No Smoothing)')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the LED response curve.',
       'value': 0x8101},

      #ETC_LED_CURVE_DESCRIPTION
      {'get_request': {'items': [{'name': 'curve', 'type': 'uint8',}]},
       'get_response': {'items': [{'name': 'curve_number', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_CURVE_DESCRIPTION',
       'link': '',
       'notes': 'Get the text description for a LED response curve.',
       'value': 0x8102},

      #ETC_LED_STROBE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'strobe_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_STROBE',
       'set_request': {'items': [{'name': 'strobe_enabled', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Enable/Disable the strobe feature.',
       'value': 0x8103},

      #ETC_LED_OUTPUT_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [
                          {'name': 'output_mode',
                           'type': 'uint8',
                           'labels': [(0, 'Regulated mode, droop com, LEDs dim at high temps'),
                                     (1, 'Boost mode, no droop comp, LEDs dim at high temps'),
                                     (2, 'Protected mode, LEDs are always dim to prevent overtemp.')],
                        }]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_OUTPUT_MODE',
       'set_request': {'items': [{'name': 'output_mode', 'type': 'uint8',
                                  'labels': [(0, 'Regulated'), (1, 'Boost'), (2, 'Protected')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the LED Output Mode',
       'value': 0x8104},

      #ETC_LED_OUTPUT_DESCRIPTION
      {'get_request': {'items': [{'name': 'output_mode', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'output_mode', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_OUTPUT_MODE_DESCRIPTION',
       'link': '',
       'notes': 'Get the text description for a LED output mode.',
       'value': 0x8105},

      #ETC_LED_RED_SHIFT
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'red_shift_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_RED_SHIFT',
       'set_request': {'items': [{'name': 'red_shift_enabled', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Enable/Disable the Red Shift Effect.',
       'value': 0x8106},

      #ETC_LED_WHITE_POINT
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'white_point', 'type': 'uint8',
                                   'labels': [(0, '2950K'), (1, '3200K'), (2, '5600K'), (3, '6500K')],
                                  }]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_WHITE_POINT',
       'set_request': {'items': [{'name': 'white_point', 'type': 'uint8',
                                  'labels': [(0, '2950K'), (1, '3200K'), (2, '5600K'), (3, '6500K')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the white point',
       'value': 0x8107},

      #ETC_LED_WHITE_POINT_DESCRIPTION
      {'get_request': {'items': [{'name': 'white_point', 'type': 'uint8',}]},
       'get_response': {'items': [{'name': 'white_point', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_WHITE_POINT_DESCRIPTION',
       'link': '',
       'notes': 'Get the text description for a given white point.',
       'value': 0x8108},

      #ETC_LED_FREQUENCY
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'frequency', 'type': 'uint16'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_FREQUENCY',
       'set_request': {'items': [{'name': 'frequency', 'type': 'uint16', 'range': [(900, 1500)]}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the LED output frequency',
       'value': 0x8109},

      #ETC_DMX_LOSS_BEHAVIOR
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'loss_behavior', 'type': 'uint8',
                                   'labels': [(0, 'Instant go dark.'), (1, 'Hold for 2 mins'), (2, 'Hold forever')],
                                  }]},
       'get_sub_device_range': 2,
       'name': 'ETC_DMX_LOSS_BEHAVIOR',
       'set_request': {'items': [{'name': 'loss_behavior', 'type': 'uint8',
                                  'labels': [(0, 'Instant go dark.'), (1, 'Hold for 2 mins'), (2, 'Hold forever')],
                                 }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Control the behavior when the DMX512 signal is lost.',
       'value': 0x810a},

      #ETC_DMX_LOSS_BEHAVIOR_DESCRIPTION
      {'get_request': {'items': [{'name': 'loss_behavior', 'type': 'uint8',}]},
       'get_response': {'items': [{'name': 'loss_behavior', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_DMX_LOSS_BEHAVIOR_DESCRIPTION',
       'link': '',
       'notes': 'Get the text description for a DMX512 loss mode.',
       'value': 0x810b},

      #ETC_LED_PLUS_SEVEN
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'plus_seven_enabled', 'type': 'bool'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_PLUS_SEVEN',
       'set_request': {'items': [{'name': 'plus_seven_enabled', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Enable/Disable the Plus Seven Control.',
       'value': 0x810c},

      #ETC_BACKLIGHT_BRIGHTNESS
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'backlight_brightness', 'type': 'uint8'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_BACKLIGHT_BRIGHTNESS',
       'set_request': {'items': [{'name': 'backlight_brightness', 'type': 'uint8'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Control the brightness of the LCD backlight.',
       'value': 0x810d},

      #ETC_BACKLIGHT_TIMEOUT
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'backlight_timeout', 'type': 'uint8',
                                   'labels': [(0, 'Never'), (1, '30 seconds'),
                                             (2, '1 minute'), (3, '5 minutes'),
                                             (4, '15 minutes')],
                                  }]},
       'get_sub_device_range': 2,
       'name': 'ETC_BACKLIGHT_TIMEOUT',
       'set_request': {'items': [{'name': 'backlight_timeout', 'type': 'uint8',
                                  'labels': [(0, 'Never'), (1, '30 seconds'),
                                            (2, '1 minute'), (3, '5 minutes'),
                                            (4, '15 minutes')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Control the timeout for the LCD backlight.',
       'value': 0x810e},

      #ETC_STATUS_INDICATORS
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'status_indicators', 'type': 'bool'}]},
       'get_sub_device_range': 2,
       'name': 'ETC_STATUS_INDICATORS',
       'set_request': {'items': [{'name': 'status_indicators', 'type': 'bool'}]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Enable/Disable the status indicators.',
       'value': 0x810f},

      #ETC_RECALIBRATE_FIXTURE
      {'name': 'ETC_RECALIBRATE_FIXTURE',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Recalibrate the fixture',
       'value': 0x8110},

      #ETC_OVER_TEMP_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'over_temperature_mode', 'type': 'uint8',
                                   'labels': [(0, 'Dark'), (1, 'Red')],
                                  }]},
       'get_sub_device_range': 2,
       'name': 'ETC_OVER_TEMP_MODE',
       'set_request': {'items': [{'name': 'over_temperature_mode', 'type': 'uint8',
                                  'labels': [(0, 'Dark'), (1, 'Red')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the over temperature mode.',
       'value': 0x8111},

      #ETC_SIMPLE_SETUP_MODE
      {'get_request': {'items': []},
       'get_response': {'items': [{'name': 'quick_setup_mode', 'type': 'uint8',
                                   'labels': [(0, 'General Use'), (1, 'State Setup'),
                                             (2, 'Architectural Setup'), (3, 'Effects Setup'),
                                             (4, 'Studio Setup'), (5, 'Advanced Setup')],
                                  }]},
       'get_sub_device_range': 2,
       'name': 'ETC_SIMPLE_SETUP_MODE',
       'set_request': {'items': [{'name': 'quick_setup_mode', 'type': 'uint8',
                                  'labels': [(0, 'General Use'), (1, 'State Setup'),
                                            (2, 'Architectural Setup'), (3, 'Effects Setup'),
                                            (4, 'Studio Setup'), (5, 'Advanced Setup')],
                                  }]},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Get or Set the simple setup mode.',
       'value': 0x8112},

      #ETC_LED_STROBE_DESCRIPTION
      {'get_request': {'items': [{'name': 'strobe_number', 'type': 'uint8',}]},
       'get_response': {'items': [{'name': 'strobe_number', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_STROBE_DESCRIPTION',
       'link': '',
       'notes': 'Get the text description for a strobe value.',
       'value': 0x8113},

      #ETC_LED_RED_SHIFT_DESCRIPTION
      {'get_request': {'items': [{'name': 'red_shift_value', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'red_shift_value', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_RED_SHIFT_DESCRIPTION',
       'link': '',
       'notes': 'Get a text description of a given Red Shift value.',
       'value': 0x8114},

      #ETC_LED_PLUS_SEVEN_DESCRIPTION
      {'get_request': {'items': [{'name': 'plus_seven_mode', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'plus_seven_mode', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_LED_PLUS_SEVEN_DESCRIPTION',
       'link': '',
       'notes': 'Get a text description for a plus seven value.',
       'value': 0x8115},

      #ETC_BACKLIGHT_TIMEOUT_DESCRIPTION
      {'get_request': {'items': [{'name': 'backlight_timeout', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'backlight_timeout', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_BACKLIGHT_TIMEOUT_DESCRIPTION',
       'link': '',
       'notes': 'Get a text description for a backlight timeout value.',
       'value': 0x8116},

      #ETC_SIMPLE_SETUP_MODE_DESCRIPTION
      {'get_request': {'items': [{'name': 'simple_setup_mode', 'type': 'uint8'}]},
       'get_response': {'items': [{'name': 'simple_setup_mode', 'type': 'uint8'},
                                  {'name': 'description', 'type': 'string', 'max_size': 32},
                                 ]},
       'get_sub_device_range': 2,
       'name': 'ETC_SIMPLE_SETUP_MODE_DESCRIPTION',
       'link': '',
       'notes': 'Get a text description for a simple setup mode.',
       'value': 0x8117},

      #ETC_PREPARE_FOR_SOFTWARE_DOWNLOAD
      {'name': 'ETC_PREPARE_FOR_SOFTWARE_DOWNLOAD',
       'set_request': {'items': []},
       'set_response': {'items': []},
       'set_sub_device_range': 1,
       'link': '',
       'notes': 'Prepare the unit for software download.',
       'value': 0xf000},
    ],
  },
]


ESTA_PIDS = [

 #DISC_UNIQUE_BRANCH
 {'discovery_request': {'items': [
    {'name': 'lower_uid', 'type': 'uid'},
    {'name': 'upper_uid', 'type': 'uid'}
  ]},
  'discovery_response': {'items': []},
  'discovery_sub_device_range': 0,
  'name': 'DISC_UNIQUE_BRANCH',
  'value': 1},

 #DISC_MUTE
 {'discovery_request': {'items': []},
  'discovery_response': {'items': [
    {'name': 'control_field', 'type': 'uint16'},
    {'name': 'binding_uid', 'type': 'group', 'items': [
      {'type': 'uid', 'name': 'binding_uid'}
    ]},
  ]},
  'discovery_sub_device_range': 0,
  'name': 'DISC_MUTE',
  'value': 2},

 #DISC_UN_MUTE
 {'discovery_request': {'items': []},
  'discovery_response': {'items': [
    {'name': 'control_field', 'type': 'uint16'},
    {'name': 'binding_uid', 'type': 'group', 'items': [
      {'type': 'uid', 'name': 'binding_uid'}
    ]},
  ]},
  'discovery_sub_device_range': 0,
  'name': 'DISC_UN_MUTE',
  'value': 3},

 #DEVICE_MODEL_DESCRIPTION
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'description',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'DEVICE_MODEL_DESCRIPTION',
  'value': 128},

 #MANUFACTURER_LABEL
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'label',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'MANUFACTURER_LABEL',
  'value': 129},

 #DEVICE_LABEL
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'label',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'DEVICE_LABEL',
  'set_request': {'items': [{'name': 'label',
                             'max_size': 32,
                             'type': 'string'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 130},

 #LAMP_STATE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'state',
                              'type': 'uint8',
                              'labels': [(0, 'Off'), (1, 'On'), (2, 'Strike'), (3, 'Standby'), (4, 'Not Present'), (0x7f, 'Error')],
                              'range': [(0, 4), (0x7f, 0xDF)],
                  }]},
  'get_sub_device_range': 2,
  'name': 'LAMP_STATE',
  'set_request': {'items': [{'name': 'state', 'type': 'uint8',
                  'labels': [(0, 'Off'), (1, 'On'), (2, 'Strike'), (3, 'Standby')],
                  'range': [(0, 3), (0x80, 0xDF)],
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1027},

 #LAMP_ON_MODE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'mode',
                              'type': 'uint8',
                              'labels': [(0, 'Off'), (1, 'DMX'), (2, 'On'), (3, 'On After Calibration')],
                              'range': [(0, 3), (0x80, 0xDF)],
                            }]},
  'get_sub_device_range': 2,
  'name': 'LAMP_ON_MODE',
  'set_request': {'items': [{'name': 'mode', 'type': 'uint8',
                  'labels': [(0, 'Off'), (1, 'DMX'), (2, 'On'), (3, 'On After Calibration')],
                  'range': [(0, 3), (0x80, 0xDF)],
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1028},

 #DEVICE_POWER_CYCLES
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'power_cycles', 'type': 'uint32'}]},
  'get_sub_device_range': 2,
  'name': 'DEVICE_POWER_CYCLES',
  'set_request': {'items': [{'name': 'power_cycles', 'type': 'uint32'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1029},

 #IDENTIFY_DEVICE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'identify_state', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'IDENTIFY_DEVICE',
  'set_request': {'items': [{'name': 'identify_state', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4096},

 #BOOT_SOFTWARE_VERSION_ID
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'version', 'type': 'uint32'}]},
  'get_sub_device_range': 2,
  'name': 'BOOT_SOFTWARE_VERSION_ID',
  'value': 193},

 #RECORD_SENSORS
 {'name': 'RECORD_SENSORS',
  'set_request': {'items': [{'name': 'sensor_number', 'type': 'uint8',
                             'range': [(0, 0xff)],
                             'labels': [(0xff, 'All Sensors')],
                 }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 514},

 #PROXIED_DEVICES
 {'get_request': {'items': []},
  'get_response': {'items': [{'type': 'group',
                              'name': 'uids',
                              'items': [{'name': 'uid', 'type': 'uid'}],
                   }]},
  'get_sub_device_range': 0,
  'name': 'PROXIED_DEVICES',
  'value': 16},

 #PROXIED_DEVICE_COUNT
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'device_count', 'type': 'uint16'},
                             {'name': 'list_changed', 'type': 'bool'}]},
  'get_sub_device_range': 0,
  'name': 'PROXIED_DEVICE_COUNT',
  'value': 17},

 #REAL_TIME_CLOCK
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'year', 'type': 'uint16'},
                             {'name': 'month', 'type': 'uint8'},
                             {'name': 'day', 'type': 'uint8'},
                             {'name': 'hour', 'type': 'uint8'},
                             {'name': 'minute', 'type': 'uint8'},
                             {'name': 'second', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'REAL_TIME_CLOCK',
  'set_request': {'items': [{'name': 'year', 'type': 'uint16', 'range': [(2003, 65535)]},
                    {'name': 'month', 'type': 'uint8', 'range': [(1, 12)]},
                    {'name': 'day', 'type': 'uint8', 'range': [(1, 31)]},
                    {'name': 'hour', 'type': 'uint8', 'range': [(0, 23)]},
                    {'name': 'minute', 'type': 'uint8', 'range': [(0, 59)]},
                    {'name': 'second', 'type': 'uint8', 'range': [(0, 60)]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1539},

 #COMMS_STATUS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'short_message', 'type': 'uint16'},
                             {'name': 'length_mismatch', 'type': 'uint16'},
                             {'name': 'checksum_fail', 'type': 'uint16'}]},
  'get_sub_device_range': 0,
  'name': 'COMMS_STATUS',
  'set_request': {'items': []},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'value': 21},

  #SENSOR_DEFINITION
  {'get_request': {'items': [{'name': 'sensor_number', 'type': 'uint8',
                             'range': [(0, 0xfe)],
                 }]},
  'get_response': {'items': [{'name': 'sensor_number', 'type': 'uint8'},
                             {'name': 'type', 'type': 'uint8',
                              'labels': [(0x00, 'Temperature'),
                                         (0x01, 'Voltage'),
                                         (0x02, 'Current'),
                                         (0x03, 'Frequency'),
                                         (0x04, 'Resistance'),
                                         (0x05, 'Power'),
                                         (0x06, 'Mass'),
                                         (0x07, 'Length'),
                                         (0x08, 'Area'),
                                         (0x09, 'Volume'),
                                         (0x0a, 'Density'),
                                         (0x0b, 'Velocity'),
                                         (0x0c, 'Acceleration'),
                                         (0x0d, 'Force'),
                                         (0x0e, 'Energy'),
                                         (0x0f, 'Pressure'),
                                         (0x10, 'Time'),
                                         (0x11, 'Angle'),
                                         (0x12, 'Position X'),
                                         (0x13, 'Position Y'),
                                         (0x14, 'Position Z'),
                                         (0x15, 'Angular velocity'),
                                         (0x16, 'Luminous intensity'),
                                         (0x17, 'Luminous flux'),
                                         (0x18, 'Illuminance'),
                                         (0x19, 'Chrominance red'),
                                         (0x1a, 'Chrominance green'),
                                         (0x1b, 'Chrominance blue'),
                                         (0x1c, 'Contacts'),
                                         (0x1d, 'Memory'),
                                         (0x1e, 'Items'),
                                         (0x1f, 'Humidity'),
                                         (0x20, '16 bit counter'),
                                         (0x7f, 'Other')],
                              'range': [(0, 0x20), (0x7f, 0xff)]},
                             {'name': 'unit', 'type': 'uint8'},
                             {'name': 'prefix', 'type': 'uint8'},
                             {'name': 'range_min', 'type': 'int16',
                              'labels': [(-32768, 'Undefined')],
                              'range': [(-32768, 32767)]
                             },
                             {'name': 'range_max', 'type': 'int16',
                              'labels': [(32767, 'Undefined')],
                              'range': [(-32767, 32767)]
                             },
                             {'name': 'normal_min', 'type': 'int16',
                              'labels': [(-32768, 'Undefined')],
                              'range': [(-32768, 32767)]
                             },
                             {'name': 'normal_max', 'type': 'int16',
                              'labels': [(32767, 'Undefined')],
                              'range': [(-32768, 32767)]
                             },
                             {'name': 'supports_recording',
                              'type': 'uint8'},
                             {'name': 'name',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'SENSOR_DEFINITION',
  'value': 512},

 #QUEUED_MESSAGES
 {'get_request': {'items': [{'name': 'status_type', 'type': 'uint8', 'labels': [
                    (1, 'Last Message'), (2, 'Advisory'),
                    (3, 'Warning'), (4, 'Error')]
                   }]},
  'get_response': {'items': []},
  'get_sub_device_range': 0,
  'name': 'QUEUED_MESSAGE',
  'value': 32},

 #LANGUAGE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'language',
                              'max_size': 2,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'LANGUAGE',
  'set_request': {'items': [{'name': 'language',
                             'max_size': 2,
                             'type': 'string'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 176},

 #DEFAULT_SLOT_VALUE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'slot_values',
                              'type': 'group',
                              'items': [{'name': 'slot_offset', 'type': 'uint16'},
                                        {'name': 'default_slot_value', 'type': 'uint8'}]
                  }]},
  'get_sub_device_range': 2,
  'name': 'DEFAULT_SLOT_VALUE',
  'value': 290},

 #RESET_DEVICE
 {'name': 'RESET_DEVICE',
  'set_request': {'items': [{'name': 'reset_mode', 'type': 'uint8', 'labels': [
                    (1, 'Warm'), (0xff, 'Cold')]
                 }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4097},

 #DEVICE_HOURS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'hours', 'type': 'uint32'}]},
  'get_sub_device_range': 2,
  'name': 'DEVICE_HOURS',
  'set_request': {'items': [{'name': 'hours', 'type': 'uint32'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1024},

 #CAPTURE_PRESET
 {'name': 'CAPTURE_PRESET',
  'set_request': {'items': [
    {'name': 'scene', 'type': 'uint16', 'range': [(0x1, 0xfffe)]},
    {'name': 'fade_up_time', 'type': 'uint16', 'multiplier': -1,},
    {'name': 'fade_down_time', 'type': 'uint16', 'multiplier': -1,},
    {'name': 'wait_time', 'type': 'uint16', 'multiplier': -1}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4144},

 #DMX_START_ADDRESS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'dmx_address', 'type': 'uint16'}]},
  'get_sub_device_range': 2,
  'name': 'DMX_START_ADDRESS',
  'set_request': {'items': [{'name': 'dmx_address', 'type': 'uint16', 'range': [
                    (1, 512)],
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 240},

 #DISPLAY_INVERT
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'invert_status', 'type': 'uint8',
                              'labels': [(0, 'Off'), (1, 'On'), (2, 'Auto')]}]},
  'get_sub_device_range': 2,
  'name': 'DISPLAY_INVERT',
  'set_request': {'items': [{'name': 'invert_status', 'type': 'uint8',
                             'labels': [(0, 'Off'), (1, 'On'), (2, 'Auto')]
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1280},

 #STATUS_MESSAGES
 {'get_request': {'items': [{'name': 'status_type', 'type': 'uint8', 'labels': [
                    (0, 'None'), (1, 'Last Message'), (2, 'Advisory'),
                    (3, 'Warning'), (4, 'Error')]
                   }]},
  'get_response': {'items': [{'type': 'group',
                              'name': 'messages',
                              'items': [{'name': 'sub_device', 'type': 'uint16'},
                                        {'name': 'status_type', 'type': 'uint8'},
                                        {'name': 'message_id', 'type': 'uint16'},
                                        {'name': 'value1', 'type': 'int16'},
                                        {'name': 'value2', 'type': 'int16'}],
                  }]},
  'get_sub_device_range': 0,
  'name': 'STATUS_MESSAGES',
  'value': 48},

 #STATUS_ID_DESCRIPTION
 {'get_request': {'items': [{'name': 'status_id', 'type': 'uint16'}]},
  'get_response': {'items': [{'name': 'label',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 0,
  'name': 'STATUS_ID_DESCRIPTION',
  'value': 49},

 #CLEAR_STATUS_ID
 {'name': 'CLEAR_STATUS_ID',
  'set_request': {'items': []},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 50},

 #SUB_DEVICE_STATUS_REPORT_THRESHOLD
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'status_type', 'type': 'uint8'}]},
  'get_sub_device_range': 3,
  'name': 'SUB_DEVICE_STATUS_REPORT_THRESHOLD',
  'set_request': {'items': [{'name': 'status_type', 'type': 'uint8', 'labels': [
                    (0, 'None'), (2, 'Advisory'), (3, 'Warning'), (4, 'Error')]
                   }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 51},

 #SENSOR_VALUE
 {'get_request': {'items': [{'name': 'sensor_number', 'type': 'uint8',
                             'range': [(0, 0xfe)],
                  }]},
  'get_response': {'items': [{'name': 'sensor_number', 'type': 'uint8'},
                             {'name': 'present_value', 'type': 'int16'},
                             {'name': 'lowest', 'type': 'int16'},
                             {'name': 'highest', 'type': 'int16'},
                             {'name': 'recorded', 'type': 'int16'}]},
  'get_sub_device_range': 2,
  'name': 'SENSOR_VALUE',
  'set_request': {'items': [{'name': 'sensor_number',
                             'type': 'uint8',
                             'range': [(0, 0xff)],
                             'labels': [(0xff, 'All Sensors')],
                 }]},
  'set_response': {'items': [{'name': 'sensor_number', 'type': 'uint8'},
                             {'name': 'present_value', 'type': 'uint16'},
                             {'name': 'lowest', 'type': 'uint16'},
                             {'name': 'highest', 'type': 'uint16'},
                             {'name': 'recorded', 'type': 'uint16'}]},
  'set_sub_device_range': 1,
  'value': 513},

 #PAN_INVERT
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'invert', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'PAN_INVERT',
  'set_request': {'items': [{'name': 'invert', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1536},

 #SOFTWARE_VERSION_LABEL
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'label',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'SOFTWARE_VERSION_LABEL',
  'value': 192},

 #LANGAUGE_CAPABILITIES
 {'get_request': {'items': []},
  'get_response': {'items': [{'type': 'group',
                              'name': 'languages',
                              'items': [{'name': 'language',
                                         'max_size': 2,
                                         'min_size': 2,
                                         'type': 'string'}],
                  }]},
  'get_sub_device_range': 2,
  'name': 'LANGUAGE_CAPABILITIES',
  'value': 160},

 #BOOT_SOFTWARE_VERSION_LABEL
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'label',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'BOOT_SOFTWARE_VERSION_LABEL',
  'value': 194},

 #LAMP_HOURS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'hours', 'type': 'uint32'}]},
  'get_sub_device_range': 2,
  'name': 'LAMP_HOURS',
  'set_request': {'items': [{'name': 'hours', 'type': 'uint32'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1025},

 #PRESET_PLAYBACK
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'mode', 'type': 'uint16',
                              'labels': [(0, 'Off'), (0xffff, 'All')],
                              'range': [(0, 0xffff)]},
                             {'name': 'level', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'PRESET_PLAYBACK',
  'set_request': {'items': [{'name': 'mode', 'type': 'uint16',
                             'labels': [(0, 'Off'), (0xffff, 'All')],
                             'range': [(0, 0xffff)]},
                            {'name': 'level', 'type': 'uint8'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4145},

 #DMX_PERSONALITY_DESCRIPTION
 {'get_request': {'items': [{'name': 'personality', 'type': 'uint8', 'range': [
                    (1, 0xff)]
                  }]},
  'get_response': {'items': [{'name': 'personality', 'type': 'uint8'},
                             {'name': 'slots_required', 'type': 'uint16'},
                             {'name': 'name',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'DMX_PERSONALITY_DESCRIPTION',
  'value': 225},

 #DISPLAY_LEVEL
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'level', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'DISPLAY_LEVEL',
  'set_request': {'items': [{'name': 'level', 'type': 'uint8'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1281},

 #DMX_PERSONALITY
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'current_personality',
                              'type': 'uint8'},
                             {'name': 'personality_count',
                              'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'DMX_PERSONALITY',
  'set_request': {'items': [{'name': 'personality', 'type': 'uint8', 'range': [
                    (1, 0xff)]
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 224},

 #SLOT_INFO
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'slots',
     'type': 'group',
     'items': [{'name': 'slot_offset', 'type': 'uint16'},
               {'name': 'slot_type',
                'type': 'uint8',
                'labels': [(0x00, 'Primary'),
                           (0x01, 'Secondary fine'),
                           (0x02, 'Secondary timing'),
                           (0x03, 'Secondary speed'),
                           (0x04, 'Secondary control'),
                           (0x05, 'Secondary index'),
                           (0x06, 'Secondary rotation speed'),
                           (0x07, 'Secondary rotation index'),
                           (0xff, 'Secondary undefined')]},
               {'name': 'slot_label_id', 'type': 'uint16'}],
    }]},
  'get_sub_device_range': 2,
  'name': 'SLOT_INFO',
  'value': 288},

 #SUPPORTED_PARAMETERS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'params',
                              'type': 'group',
                              'items': [{'name': 'param_id', 'type': 'uint16'}],
                             }]
                  },
  'get_sub_device_range': 2,
  'name': 'SUPPORTED_PARAMETERS',
  'value': 80},

 #PARAMETER_DESCRIPTION
 {'get_request': {'items': [{'name': 'pid', 'type': 'uint16'}]},
  'get_response': {'items': [{'name': 'pid', 'type': 'uint16'},
                             {'name': 'pdl_size', 'type': 'uint8'},
                             {'name': 'data_type', 'type': 'uint8',
                              'labels': [(0x00, 'Not defined'),
                                         (0x01, 'Bit field'),
                                         (0x02, 'ASCII'),
                                         (0x03, 'uint8'),
                                         (0x04, 'int8'),
                                         (0x05, 'uint16'),
                                         (0x06, 'int16'),
                                         (0x07, 'uint32'),
                                         (0x08, 'int32')],
                              'range': [(0x00, 0x08), (0x80, 0xdf)]},
                             {'name': 'command_class', 'type': 'uint8',
                              'labels': [(1, 'Get'), (2, 'Set'), (3, 'Get and Set')]},
                             {'name': 'type', 'type': 'uint8'},
                             {'name': 'unit', 'type': 'uint8'},
                             {'name': 'prefix', 'type': 'uint8'},
                             {'name': 'min_value', 'type': 'uint32'},
                             {'name': 'max_value', 'type': 'uint32'},
                             {'name': 'default_value', 'type': 'uint32'},
                             {'name': 'description',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 0,
  'name': 'PARAMETER_DESCRIPTION',
  'value': 81},

 #TILT_INVERT
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'invert', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'TILT_INVERT',
  'set_request': {'items': [{'name': 'invert', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1537},

 #DEVICE_INFO
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'protocol_major', 'type': 'uint8'},
                             {'name': 'protocol_minor', 'type': 'uint8'},
                             {'name': 'device_model', 'type': 'uint16'},
                             {'name': 'product_category',
                              'type': 'uint16',
                              'labels': [(0x0000, 'Not declared'),
                                         (0x0100, 'Fixture'),
                                         (0x0101, 'Fixed fixture'),
                                         (0x0102, 'Moving yoke fixture'),
                                         (0x0103, 'Moving mirror fixture'),
                                         (0x01ff, 'Fixture other'),
                                         (0x0200, 'Fixture accessory'),
                                         (0x0201, 'Fixture accessory color'),
                                         (0x0202, 'Fixture accessory yoke'),
                                         (0x0203, 'Fixture accessory mirror'),
                                         (0x0204, 'Fixture accessory effect'),
                                         (0x0205, 'Fixture accessory beam'),
                                         (0x02ff, 'Fixture accessory other'),
                                         (0x0300, 'Projector'),
                                         (0x0301, 'Projector fixed'),
                                         (0x0302, 'Projector moving yoke'),
                                         (0x0303, 'Projector moving mirror'),
                                         (0x03ff, 'Projector other'),
                                         (0x0400, 'Atmospheric'),
                                         (0x0401, 'Atmospheric effect'),
                                         (0x0402, 'Atmospheric pyro'),
                                         (0x04ff, 'Atmospheric other'),
                                         (0x0500, 'Dimmer'),
                                         (0x0501, 'Dimmer AC incandescent'),
                                         (0x0502, 'Dimmer AC fluorescent'),
                                         (0x0503, 'Dimmer AC cold cathode'),
                                         (0x0504, 'Dimmer AC no dim'),
                                         (0x0505, 'Dimmer AC ELV'),
                                         (0x0506, 'Dimmer AC other'),
                                         (0x0507, 'Dimmer DC level'),
                                         (0x0508, 'Dimmer DC PWM'),
                                         (0x0509, 'Dimmer DC LED'),
                                         (0x05ff, 'Dimmer other'),
                                         (0x0600, 'Power'),
                                         (0x0601, 'Power control'),
                                         (0x0602, 'Power source'),
                                         (0x06ff, 'Power other'),
                                         (0x0700, 'Scenic'),
                                         (0x0701, 'Scenic drive'),
                                         (0x07ff, 'Scenic other'),
                                         (0x0800, 'Data'),
                                         (0x0801, 'Data distribution'),
                                         (0x0802, 'Data conversion'),
                                         (0x08ff, 'Data other'),
                                         (0x0900, 'A/V'),
                                         (0x0901, 'A/V audio'),
                                         (0x0902, 'A/V video'),
                                         (0x09ff, 'AV other'),
                                         (0x0a00, 'Monitor'),
                                         (0x0a01, 'AC line power monitor'),
                                         (0x0a02, 'DC power monitor'),
                                         (0x0a03, 'Environmental monitor'),
                                         (0x0aff, 'Other monitor'),
                                         (0x7000, 'Control'),
                                         (0x7001, 'Controller'),
                                         (0x7002, 'Backup device'),
                                         (0x70ff, 'Other control'),
                                         (0x7100, 'Test'),
                                         (0x7101, 'Test equipment'),
                                         (0x71ff, 'Test equipment other'),
                                         (0x7fff, 'Other')],
                              'range': [(0x0000, 0x0000),
                                        (0x0100, 0x0103),
                                        (0x01ff, 0x0205),
                                        (0x02ff, 0x0303),
                                        (0x03ff, 0x0402),
                                        (0x04ff, 0x0509),
                                        (0x05ff, 0x0602),
                                        (0x06ff, 0x0701),
                                        (0x07ff, 0x0802),
                                        (0x08ff, 0x0902),
                                        (0x09ff, 0x0a03),
                                        (0x0aff, 0x0aff),
                                        (0x7000, 0x7002),
                                        (0x70ff, 0x7101),
                                        (0x7fff, 0x7fff),
                                        (0x8000, 0xdfff)]},
                             {'name': 'software_version',
                              'type': 'uint32'},
                             {'name': 'dmx_footprint', 'type': 'uint16'},
                             {'name': 'current_personality',
                              'type': 'uint8'},
                             {'name': 'personality_count',
                              'type': 'uint8'},
                             {'name': 'dmx_start_address', 'type': 'uint16'},
                             {'name': 'sub_device_count',
                              'type': 'uint16'},
                             {'name': 'sensor_count', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'DEVICE_INFO',
  'value': 96},

 #FACTORY_DEFAULTS
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'using_defaults', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'FACTORY_DEFAULTS',
  'set_request': {'items': []},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 144},

 #LAMP_STRIKES
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'strikes', 'type': 'uint32'}]},
  'get_sub_device_range': 2,
  'name': 'LAMP_STRIKES',
  'set_request': {'items': [{'name': 'strikes', 'type': 'uint32'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1026},

 #SELF_TEST_DESCRIPTION
 {'get_request': {'items': [{'name': 'test_number', 'type': 'uint8'}]},
  'get_response': {'items': [{'name': 'test_number', 'type': 'uint8'},
                             {'name': 'description',
                              'max_size': 32,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'SELF_TEST_DESCRIPTION',
  'value': 4129},

 #POWER_STATE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'power_state', 'type': 'uint8',
                              'labels': [(0, 'Full Off'), (1, 'Shutdown'), (2, 'Standby'), (0xff, 'Normal')],
                            }]},
  'get_sub_device_range': 2,
  'name': 'POWER_STATE',
  'set_request': {'items': [{'name': 'power_state', 'type': 'uint8', 'labels': [
                    (0, 'Full Off'), (1, 'Shutdown'), (2, 'Standby'),
                    (0xff, 'Normal')]
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4112},

 #PERFORM_SELF_TEST
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'tests_active', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'PERFORM_SELFTEST',
  'set_request': {'items': [{'name': 'test_number', 'type': 'uint8',
                  'range': [(0, 0xff)],
                  'labels': [(0, 'Off'), (0xff, 'All')],
                  }]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 4128},

 #SLOT_DESCRIPTION
 {'get_request': {'items': [{'name': 'slot_number', 'type': 'uint16'}]},
  'get_response': {'items': [{'name': 'slot_number', 'type': 'uint16'},
                             {'name': 'name', 'max_size': 32, 'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'SLOT_DESCRIPTION',
  'value': 289},

 #PRODUCT_DETAIL_ID_LIST
 {'get_request': {'items': []},
  'get_response': {'items': [{
    'name': 'detail_ids',
    'type': 'group',
    'max_size': 6,
    'items': [{'name': 'detail_id',
      'type': 'uint16',
      'labels': [(0x0000, 'Not declared'),
                 (0x0001, 'Arc Lamp'),
                 (0x0002, 'Metal Halide Lamp'),
                 (0x0003, 'Incandescent Lamp'),
                 (0x0004, 'LED'),
                 (0x0005, 'Fluroescent'),
                 (0x0006, 'Cold Cathode'),
                 (0x0007, 'Electro-luminescent'),
                 (0x0008, 'Laser'),
                 (0x0009, 'Flash Tube'),
                 (0x0100, 'Color Scroller'),
                 (0x0101, 'Color Wheel'),
                 (0x0102, 'Color Changer (Semaphore or other type)'),
                 (0x0103, 'Iris'),
                 (0x0104, 'Dimming Shuttle'),
                 (0x0105, 'Profile Shuttle'),
                 (0x0106, 'Barndoor Shuttle'),
                 (0x0107, 'Effects Disc'),
                 (0x0108, 'Gobo Rotator'),
                 (0x0200, 'Video'),
                 (0x0201, 'Slide'),
                 (0x0202, 'Film'),
                 (0x0203, 'Oil Wheel'),
                 (0x0204, 'LCD Gate'),
                 (0x0300, 'Fogger, Glycol'),
                 (0x0301, 'Fogger, Mineral Oil'),
                 (0x0302, 'Fogger, Water'),
                 (0x0303, 'Dry Ice/ Carbon Dioxide Device'),
                 (0x0304, 'Nitrogen based'),
                 (0x0305, 'Bubble or Foam Machine'),
                 (0x0306, 'Propane Flame'),
                 (0x0307, 'Other Flame'),
                 (0x0308, 'Scents'),
                 (0x0309, 'Snow Machine'),
                 (0x030a, 'Water Jet'),
                 (0x030b, 'Wind Machine'),
                 (0x030c, 'Confetti Machine'),
                 (0x030d, 'Hazard (Any form of pyrotechnic control or device.)'),
                 (0x0400, 'Phase Control'),
                 (0x0401, 'Phase Angle'),
                 (0x0402, 'Sine'),
                 (0x0403, 'PWM'),
                 (0x0404, 'DC'),
                 (0x0405, 'HF Ballast'),
                 (0x0406, 'HFHV Neon/Argon'),
                 (0x0407, 'HFHV Electroluminscent'),
                 (0x0408, 'Metal Halide Ballast'),
                 (0x0409, 'Bit Angle Modulation'),
                 (0x040a, 'Frequency Modulation'),
                 (0x040b, 'High Frequency 12V'),
                 (0x040c, 'Mechanical Relay'),
                 (0x040d, 'Electronic Relay'),
                 (0x040e, 'Electronic Switch'),
                 (0x040f, 'Contactor'),
                 (0x0500, 'Mirror Ball Rotator'),
                 (0x0501, 'Other Rotator'),
                 (0x0502, 'Kabuki Drop'),
                 (0x0503, 'Curtain'),
                 (0x0504, 'Line Set'),
                 (0x0505, 'Motor Control'),
                 (0x0506, 'Damper Control'),
                 (0x0600, 'Splitter'),
                 (0x0601, 'Ethernet Node'),
                 (0x0602, 'DMX512 Merger'),
                 (0x0603, 'Data Patch'),
                 (0x0604, 'Wireless link'),
                 (0x0701, 'Protocol Convertor'),
                 (0x0702, 'DMX512 to DC Voltage'),
                 (0x0703, 'DC Voltage to DMX512'),
                 (0x0704, 'Switch Panel'),
                 (0x0800, 'Router'),
                 (0x0801, 'Fader, Single Channel'),
                 (0x0802, 'Mixer, Multi Channel'),
                 (0x0900, 'Manual Changeover'),
                 (0x0901, 'Auto Changeover'),
                 (0x0902, 'Test Device'),
                 (0x0a00, 'GFI / RCD Device'),
                 (0x0a01, 'Battery'),
                 (0x0a02, 'Controllable Breaker'),
                 (0x7fff, 'Other Device')],
      'range': [(0x0000, 0x0009),
                (0x0100, 0x0108),
                (0x0200, 0x0204),
                (0x0300, 0x030d),
                (0x0400, 0x040f),
                (0x0500, 0x0506),
                (0x0600, 0x0604),
                (0x0700, 0x0704),
                (0x0800, 0x0802),
                (0x0900, 0x0902),
                (0x0a00, 0x0a02),
                (0x7fff, 0x7fff),
                (0x8000, 0xdfff)]}],
    }]},
  'get_sub_device_range': 2,
  'name': 'PRODUCT_DETAIL_ID_LIST',
  'value': 112},

 #PAN_TILT_SWAP
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'swap', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'PAN_TILT_SWAP',
  'set_request': {
                  'items': [{'name': 'swap', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 1538},

 #IDENTIFY_MODE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'identify_mode', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'IDENTIFY_MODE',
  'set_request': {
                  'items': [{'name': 'identify_mode',
                             'type': 'uint8',
                             'labels': [(0, 'Quiet'), (0xff, 'Loud')],
                            }]
                 },
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x1040},

 #PRESET_INFO
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'level_field_supported', 'type': 'bool'},
    {'name': 'preset_sequence_supported', 'type': 'bool'},
    {'name': 'split_times_supported', 'type': 'bool'},
    {'name': 'fail_infinite_delay_supported', 'type': 'bool'},
    {'name': 'fail_infinite_hold_supported', 'type': 'bool'},
    {'name': 'startup_infinite_hold_supported', 'type': 'bool'},
    {'name': 'max_scene_number', 'type': 'uint16'},
    {'name': 'min_preset_fade_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_preset_fade_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'min_preset_wait_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_preset_wait_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'min_fail_delay_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_fail_delay_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'min_fail_hold_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_fail_hold_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'min_startup_delay_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_startup_delay_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'min_startup_hold_time', 'type': 'uint16', 'multiplier': -1},
    {'name': 'max_startup_hold_time', 'type': 'uint16', 'multiplier': -1},
  ]},
  'get_sub_device_range': 2,
  'name': 'PRESET_INFO',
  'value': 0x1041},

 #PRESET_STATUS
 {'get_request': {'items': [
    {'name': 'scene_number', 'type': 'uint16', 'range': [(1, 0xfffe)]},
  ]},
  'get_response': {'items': [
      {'name': 'scene_number', 'type': 'uint16', 'range': [(1, 0xfffe)]},
      {'name': 'up_fade_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'down_fade_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'wait_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'programmed', 'type': 'uint8',
       'labels': [(0, 'Not Programmed'), (1, 'Programmed'), (2, 'Read Only')],
      },
  ]},
  'get_sub_device_range': 2,
  'set_request': {'items': [
      {'name': 'scene_number', 'type': 'uint16', 'range': [(1, 0xfffe)]},
      {'name': 'up_fade_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'down_fade_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'wait_time', 'type': 'uint16', 'multiplier': -1},
      {'name': 'clear_preset', 'type': 'bool'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'PRESET_STATUS',
  'value': 0x1042},

 #PRESET_MERGEMODE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'merge_mode', 'type': 'uint8',
     'labels': [(0, 'Default'), (1, 'HTP'), (2, 'LTP'), (3, 'DMX Only'),
               (0xff, 'Other')],
    },
  ]},
  'get_sub_device_range': 2,
  'set_request': {'items': [
    {'name': 'merge_mode', 'type': 'uint8',
     'labels': [(0, 'Default'), (1, 'HTP'), (2, 'LTP'), (3, 'DMX Only'),
               (0xff, 'Other')],
    },
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'PRESET_MERGEMODE',
  'value': 0x1043},

 #POWER_ON_SELF_TEST
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'power_on_self_test', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'POWER_ON_SELF_TEST',
  'set_request': {'items': [{'name': 'power_on_self_test', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x1044},

 #DMX_BLOCK_ADDRESS
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'sub_device_footprint', 'type': 'uint16'},
    {'name': 'base_dmx_address', 'type': 'uint16'}]},
  'get_sub_device_range': 0,
  'name': 'DMX_BLOCK_ADDRESS',
  'set_request': {'items': [
    {'name': 'base_dmx_address', 'type': 'uint16', 'range': [(1, 512)]}
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'value': 0x0140},

 #DMX_FAIL_MODE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'scene_number', 'type': 'uint16'},
    {'name': 'loss_of_signal_delay', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'hold_time', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'level', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'DMX_FAIL_MODE',
  'set_request': {'items': [
    {'name': 'scene_number', 'type': 'uint16',
     'labels': [(0, 'Fixed Level')],
     'range': [(0, 0xff)],
    },
    {'name': 'loss_of_signal_delay', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'hold_time', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'level', 'type': 'uint8'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0141},

 #DMX_STARTUP_MODE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'scene_number', 'type': 'uint16'},
    {'name': 'startup_delay', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'hold_time', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'level', 'type': 'uint8'}]},
  'get_sub_device_range': 2,
  'name': 'DMX_STARTUP_MODE',
  'set_request': {'items': [
    {'name': 'scene_number', 'type': 'uint16',
     'labels': [(0, 'Fixed Level')],
     'range': [(0, 0xff)],
    },
    {'name': 'startup_delay', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'hold_time', 'type': 'uint16', 'multiplier': -1,
     'labels': [(0xffff, 'Infinite')],
     'range': [(0, 0xffff)],
    },
    {'name': 'level', 'type': 'uint8'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0142},

 #DIMMER_INFO
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'minimum_level_lower', 'type': 'uint16'},
    {'name': 'minimum_level_upper', 'type': 'uint16'},
    {'name': 'maximum_level_lower', 'type': 'uint16'},
    {'name': 'maximum_level_upper', 'type': 'uint16'},
    {'name': 'number_curves_supported', 'type': 'uint8'},
    {'name': 'levels_resolution', 'type': 'uint8',
     'range': [(0, 0x10)],
    },
    {'name': 'split_levels_supported', 'type': 'bool'},
  ]},
  'get_sub_device_range': 2,
  'name': 'DIMMER_INFO',
  'value': 0x0340},

 #MINIMUM_LEVEL
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'minimum_level_increasing', 'type': 'uint16'},
    {'name': 'minimum_level_decreasing', 'type': 'uint16'},
    {'name': 'on_below_minimum', 'type': 'bool'},
  ]},
  'get_sub_device_range': 2,
  'name': 'MINIMUM_LEVEL',
  'set_request': {'items': [
    {'name': 'minimum_level_increasing', 'type': 'uint16'},
    {'name': 'minimum_level_decreasing', 'type': 'uint16'},
    {'name': 'on_below_minimum', 'type': 'bool'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0341},

 #MAXIMUM_LEVEL
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'maximum_level', 'type': 'uint16'},
  ]},
  'get_sub_device_range': 2,
  'name': 'MAXIMUM_LEVEL',
  'set_request': {'items': [
    {'name': 'maximum_level', 'type': 'uint16'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0342},

 #CURVE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'current_curve', 'type': 'uint8'},
    {'name': 'number_curves', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 2,
  'name': 'CURVE',
  'set_request': {'items': [
    {'name': 'curve', 'type': 'uint8', 'range': [(1, 0xff0)]},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0343},

 #CURVE_DESCRIPTION
 {'get_request': {'items': [
   {'name': 'curve_number', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'get_response': {'items': [
    {'name': 'curve_number', 'type': 'uint8', 'range': [(1, 0xff)]},
    {'name': 'curve_description', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 2,
  'name': 'CURVE_DESCRIPTION',
  'value': 0x0344},

 #OUTPUT_RESPONSE_TIME
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'current_response_time', 'type': 'uint8'},
    {'name': 'number_response_options', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 2,
  'name': 'OUTPUT_RESPONSE_TIME',
  'set_request': {'items': [
    {'name': 'response_time', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0345},

 #OUTPUT_RESPONSE_TIME_DESCRIPTION
 {'get_request': {'items': [
   {'name': 'response_time', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'get_response': {'items': [
    {'name': 'response_time', 'type': 'uint8', 'range': [(1, 0xff)]},
    {'name': 'response_time_description', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 2,
  'name': 'OUTPUT_RESPONSE_TIME_DESCRIPTION',
  'value': 0x0346},

 #MODULATION_FREQUENCY
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'current_modulation_frequency', 'type': 'uint8'},
    {'name': 'number_modulation_frequencies', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 2,
  'name': 'MODULATION_FREQUENCY',
  'set_request': {'items': [
    {'name': 'modulation_frequency', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0347},

 #MODULATION_FREQUENCY_DESCRIPTION
 {'get_request': {'items': [
   {'name': 'modulation_frequency', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'get_response': {'items': [
    {'name': 'modulation_frequency', 'type': 'uint8', 'range': [(1, 0xff)]},
    {'name': 'frequency', 'type': 'uint32'},
    {'name': 'modulation_frequency_description', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 2,
  'name': 'MODULATION_FREQUENCY_DESCRIPTION',
  'value': 0x0348},

 #BURN_IN
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'hours_remaining', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 2,
  'name': 'BURN_IN',
  'set_request': {'items': [
    {'name': 'hours', 'type': 'uint8'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0440},

 #LOCK_PIN
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'pin_code', 'type': 'uint16',
     'range': [(0, 0x0270f)],
    },
  ]},
  'get_sub_device_range': 2,
  'name': 'LOCK_PIN',
  'set_request': {'items': [
    {'name': 'new_pin_code', 'type': 'uint16',
     'range': [(0, 0x270f)],
    },
    {'name': 'current_pin_code', 'type': 'uint16',
     'range': [(0, 0x270f)],
    },
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0640},

  #LOCK_STATE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'current_lock_state', 'type': 'uint8',
     'labels': [(0, 'Unlocked')],
     'range': [(0, 0xff)],
    },
    {'name': 'number_of_lock_states', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 2,
  'name': 'LOCK_STATE',
  'set_request': {'items': [
    {'name': 'pin_code', 'type': 'uint16', 'range': [(0, 0x270f)]},
    {'name': 'lock_state', 'type': 'uint8',
     'labels': [(0, 'Unlocked')],
     'range': [(0, 0xff)],
    },
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'value': 0x0641},

 #LOCK_STATE DESCRIPTION
 {'get_request': {'items': [
     {'name': 'lock_state', 'type': 'uint8', 'range': [(1, 0xff)]},
  ]},
  'get_response': {'items': [
    {'name': 'lock_state', 'type': 'uint8',
     'range': [(1, 0xff)],
    },
    {'name': 'lock_state_description', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 2,
  'name': 'LOCK_STATE_DESCRIPTION',
  'value': 0x0642},

# These are ordered to match how they appear in E1.33
# The pid values will change in the final document.
 #ENDPOINT_LIST
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'list_change_number', 'type' : 'uint32'},
    {'name': 'endpoints', 'type': 'group',
     'items': [{'name': 'endpoint_id', 'type': 'uint16'}],
     }
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_LIST',
  'draft': True,
  'value': 0x7fe0},

 #ENDPOINT_LIST_CHANGE
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'list_change_number', 'type': 'uint32',
     }
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_LIST_CHANGE',
  'draft': True,
  'value': 0x7fee},

 #ENDPOINT_IDENTIFY
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
   ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'identify_state', 'type': 'bool'}
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_IDENTIFY',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16',
     'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'identify_state', 'type': 'bool'}
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe9},

  #ENDPOINT_TO_UNIVERSE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
   ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16'},
    {'name': 'universe', 'type': 'uint16', 'range': [(1, 0xffff)],
     'labels': [(0xffff, 'Composite')],
    },
    {'name': 'physical', 'type': 'bool'},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_TO_UNIVERSE',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'universe', 'type': 'uint16', 'range': [(1, 0xf9ff)],
     'labels': [(0xffff, 'Composite')]},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe1},

 #RDM_TRAFFIC_ENABLE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'rdm_enabled', 'type': 'bool'}
  ]},
  'get_sub_device_range': 0,
  'name': 'RDM_TRAFFIC_ENABLE',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'rdm_enabled', 'type': 'bool'}
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe2},

 #ENDPOINT_MODE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'endpoint_function', 'type': 'uint8',
     'labels': [(0, 'Disabled'), (1, 'Input'), (2, 'Output')]},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_MODE',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'endpoint_function', 'type': 'uint8',
     'labels': [(0, 'Disabled'), (1, 'Input'), (2, 'Output')]},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe3},

 #ENDPOINT_LABEL
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'endpoint_label', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_LABEL',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'endpoint_label', 'type': 'string', 'max_size': 32},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe4},

  #DISCOVERY_STATE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'device_count', 'type': 'uint16', 'range': [(0, 0xfffe)],
     'labels': [(0xffff, 'Not Supported')]},
    {'name': 'discovery_state', 'type': 'uint8',
     'labels': [(0, 'Not Run'), (1, 'Completed'),
               (2, 'Incremental'), (3, 'Full')]},
  ]},
  'get_sub_device_range': 0,
  'name': 'DISCOVERY_STATE',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'discovery_state', 'type': 'uint8',
     'labels': [(0, 'Not Run'), (1, 'Completed'),
               (2, 'Incremental'), (3, 'Full')],
    },
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe5},

 #BACKGROUND_DISCOVERY
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'background_discovery', 'type': 'bool'},
  ]},
  'get_sub_device_range': 0,
  'name': 'BACKGROUND_DISCOVERY',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'background_discovery', 'type': 'bool'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fea},

 #ENDPOINT_TIMING
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'current_setting', 'type': 'uint8'},
    {'name': 'number_of_settings', 'type': 'uint8'},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_TIMING',
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'timing_setting', 'type': 'uint8'},
  ]},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fe6},

 #ENDPOINT_TIMING_DESCRIPTION
 {'get_request': {'items': [
    {'name': 'timing_setting', 'type': 'uint8'},
  ]},
  'get_response': {'items': [
    {'name': 'timing_setting', 'type': 'uint8'},
    {'name': 'description', 'type': 'string', 'max_size': 32},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_TIMING_DESCRIPTION',
  'draft': True,
  'value': 0x7fe7},

 #ENDPOINT_DEVICE_LIST_CHANGE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]}
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'list_change_number', 'type': 'uint32'},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_DEVICE_LIST_CHANGE',
  'draft': True,
  'value': 0x7feb},

 #ENDPOINT_DEVICES
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]}
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'list_change_number', 'type': 'uint32'},
    {'type': 'group', 'name': 'uids', 'items': [{'name': 'uid', 'type': 'uid'}]},
  ]},
  'get_sub_device_range': 0,
  'name': 'ENDPOINT_DEVICES',
  'draft': True,
  'value': 0x7fec},

 #BINDING_CONTROL_FIELDS
 {'get_request': {'items': [ {'name': 'uid', 'type': 'uid'}]},
  'get_response': {'items': [
    {'name': 'uid', 'type': 'uid'},
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'control_bits', 'type': 'uint16'},
    {'name': 'binding_uid', 'type': 'uid'},
   ]},
  'get_sub_device_range': 0,
  'name': 'BINDING_CONTROL_FIELDS',
  'draft': True,
  'value': 0x7fe8},

 #TCP_COMMS_STATUS
 {'get_request': {'items': [
  ]},
  'get_response': {'items': [
    {'name': 'controller_ip', 'type': 'ipv4',
     'labels': [(0, 'No Connection')]},
    {'name': 'unhealthy_events', 'type': 'uint16'},
    {'name': 'connection_events', 'type': 'uint16'},
  ]},
  'get_sub_device_range': 0,
  'name': 'TCP_COMMS_STATUS',
  'set_request': {'items': []},
  'set_response': {'items': []},
  'set_sub_device_range': 0,
  'draft': True,
  'value': 0x7fed},

 #BACKGROUND_QUEUED_STATUS_POLICY
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]}
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xfffe)]},
    {'name': 'current_policy_setting', 'type': 'uint8'},
    {'name': 'num_policy_settings', 'type':'uint8'}
  ]},
  'set_request': {'items':[
    {'name': 'endpoint_id', 'type': 'uint16', 'range': [(0, 0xffff)],
     'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'policy', 'type':'uint8'}
  ]},
  'set_response' : {'items': []},
  'get_sub_device_range': 0,
  'set_sub_device_range': 0,
  'name': 'BACKGROUND_QUEUED_STATUS_POLICY',
  'draft': True,
  'value': 0x7fd0},

 #BACKGROUND_QUEUED_STATUS_POLICY_DESCRIPTION
 {'get_request': {'items': [
    {'name': 'policy_setting', 'type': 'uint8'},
  ]},
  'get_response': {'items': [
    {'name': 'policy_setting', 'type': 'uint8'},
    {'name': 'description', 'type': 'string', 'max_size': 32}
  ]},
  'get_sub_device_range': 0,
  'name': 'BACKGROUND_QUEUED_STATUS_POLICY_DESCRIPTION',
  'draft': True,
  'value': 0x7fd1},

 #BACKGROUND_STATUS_TYPE
 {'get_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range':[(0, 0xfffe)]},
  ]},
  'get_response': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range':[(0, 0xfffe)]},
    {'name': 'status_type', 'type': 'uint8'}
  ]},
  'get_sub_device_range': 0,
  'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range':[(0, 0xffff)],
    'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'status_type', 'type': 'uint8'}
  ]},
  'set_response': {'items':[]},
  'set_sub_device_range' : 0,
  'name': 'BACKGROUND_STATUS_TYPE',
  'draft': True,
  'value': 0x7fd2},

  #QUEUED_STATUS_ENDPOINT_COLLECTION
 {'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range':[(0, 0xfffe)],
    'labels': [(0xffff, 'All Endpoints')]},
    {'name': 'status_type', 'type': 'uint8'}
  ]},
  'set_response': {'items':[]},
  'set_sub_device_range' : 0,
  'name': 'QUEUED_STATUS_ENDPOINT_COLLECTION',
  'draft': True,
  'value': 0x7fd3},

 #QUEUED_STATUS_UID_COLLECTION
 {'set_request': {'items': [
    {'name': 'endpoint_id', 'type': 'uint16', 'range':[(0, 0xfffe)]},
    {'name': 'target_uid', 'type': 'uid'},
    {'name': 'status_type', 'type': 'uint8'}
  ]},
  'set_response': {'items':[]},
  'set_sub_device_range' : 0,
  'name': 'QUEUED_STATUS_UID_COLLECTION',
  'draft': True,
  'value': 0x7fd4},
  
# These are ordered to match how they appear in E1.37-2
# The pid values will change in the final document.
 #LIST_INTERFACES
 {'get_request': {'items': []},
  'get_response': {'items': [
    {'name': 'interfaces',
     'type': 'group',
     'items': [{'name': 'interface_identifier', 'type': 'uint16', 'range':[(0, 0xff00)]},
               {'name': 'interface_hardware_type', 'type': 'uint16',
                'labels': [(1, 'Ethernet')], 'range': [(0, 0xffff)]}],
    }]},
  'get_sub_device_range': 2,
  'name': 'LIST_INTERFACES',
  'draft': True,
  'value': 0xffe0},

 #INTERFACE_LABEL
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'interface_label', 'max_size': 32, 'type': 'string'}]},
  'get_sub_device_range': 2,
  'name': 'INTERFACE_LABEL',
  'draft': True,
  'value': 0xffe1},

 #INTERFACE_HARDWARE_ADDRESS_TYPE1
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'hardware_address', 'type': 'mac'}]},
  'get_sub_device_range': 2,
  'name': 'INTERFACE_HARDWARE_ADDRESS_TYPE1',
  'draft': True,
  'value': 0xffe2},
  
 #IPV4_DHCP_MODE
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'dhcp', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'dhcp', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'IPV4_DHCP_MODE',
  'draft': True,
  'value': 0xffe3},

 #IPV4_ZEROCONF_MODE
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'zeroconf', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'zeroconf', 'type': 'bool'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'IPV4_ZEROCONF_MODE',
  'draft': True,
  'value': 0xffe4},

 #IPV4_CURRENT_ADDRESS
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'ipv4_address', 'type': 'ipv4',
                              'labels': [(0, 'IPv4 Unconfigured')]},
                             {'name': 'netmask', 'type': 'uint8', 'range': [
                                (0, 32)]},
                             {'name': 'dhcp_address', 'type': 'bool'}]},
  'get_sub_device_range': 2,
  'name': 'IPV4_CURRENT_ADDRESS',
  'draft': True,
  'value': 0xffe5},  

 #IPV4_STATIC_ADDRESS
 {'get_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                             'range': [(0, 0xff00)]}]},
  'get_response': {'items': [{'name': 'interface_identifier', 'type': 'uint16'},
                             {'name': 'ipv4_address', 'type': 'ipv4',
                              'labels': [(0, 'IPv4 Unconfigured')]},
                             {'name': 'netmask', 'type': 'uint8', 'range': [
                                (0, 32)]}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                              'range': [(0, 0xff00)]},
                            {'name': 'ipv4_address', 'type': 'ipv4',
                             'labels': [(0, 'IPv4 Unconfigured')]},
                            {'name': 'netmask', 'type': 'uint8', 'range': [
                               (0, 32)]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'IPV4_STATIC_ADDRESS',
  'draft': True,
  'value': 0xffe6},

 #INTERFACE_APPLY_CONFIGURATION
 {'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                              'range': [(0, 0xff00)]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'INTERFACE_APPLY_CONFIGURATION',
  'draft': True,
  'value': 0xffe9},

 #INTERFACE_RENEW_DHCP
 {'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                              'range': [(0, 0xff00)]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'INTERFACE_RENEW_DHCP',
  'draft': True,
  'value': 0xffe7},

 #INTERFACE_RELEASE_DHCP
 {'set_request': {'items': [{'name': 'interface_identifier', 'type': 'uint16',
                              'range': [(0, 0xff00)]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'INTERFACE_RELEASE_DHCP',
  'draft': True,
  'value': 0xffe8},
  
 #IPV4_DEFAULT_ROUTE
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'ipv4_address', 'type': 'ipv4',
                              'labels': [(0, 'No Default Route')]}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'ipv4_address', 'type': 'ipv4',
                              'labels': [(0, 'No Default Route')]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'IPV4_DEFAULT_ROUTE',
  'draft': True,
  'value': 0xffea},

 #DNS_NAME_SERVER
 {'get_request': {'items': [{'name': 'name_server_index', 'type': 'uint8',
                             'range': [(0, 2)]}]},
  'get_response': {'items': [{'name': 'name_server_index', 'type': 'uint8'},
                             {'name': 'name_server_address', 'type': 'ipv4',
                              'labels': [(0, 'IPv4 Unconfigured')]}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'name_server_index', 'type': 'uint8',
                              'range': [(0, 2)]},
                            {'name': 'name_server_address', 'type': 'ipv4',
                             'labels': [(0, 'IPv4 Unconfigured')]}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'DNS_NAME_SERVER',
  'draft': True,
  'value': 0xffeb},
  
 #DNS_HOSTNAME
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'dns_hostname',
                              'min_size': 1,
                              'max_size': 63,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'dns_hostname',
                              'min_size': 1,
                              'max_size': 63,
                              'type': 'string'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'DNS_HOSTNAME',
  'draft': True,
  'value': 0xffec},
  
 #DNS_DOMAIN_NAME
 {'get_request': {'items': []},
  'get_response': {'items': [{'name': 'dns_domain_name',
                              'max_size': 231,
                              'type': 'string'}]},
  'get_sub_device_range': 2,
  'set_request': {'items': [{'name': 'dns_domain_name',
                              'max_size': 231,
                              'type': 'string'}]},
  'set_response': {'items': []},
  'set_sub_device_range': 1,
  'name': 'DNS_DOMAIN_NAME',
  'draft': True,
  'value': 0xffed},
]
